                              
                       
         ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲       
        ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱  
       . ۰  ۰ ۰ ۰ ۰ ۰  ۰ ۰   .  
       :                                  : 
        ۰ ۰ ۰ ۰ ۰ ۰ ۰  ۰ ۰     
       : ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ ۱ :
        ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲ ۲  
                    
       Ĵ    
       :  :   
         1o. Zine Brasileiro sobre Programacao, Demos & Graficos  
       :  :     
        
     
                            CodersZine 00 - Junho/98
                      www.come.to/coders - coders@usa.net
                          from the #Coders of BrasIRC


          <><>   


             "Programar e' uma arte, e como toda arte e' bela"
                                                    (BadGod)


       "O ministerio da saude adverte: 'Nao programar faz mal a saude'"
                                                             (xCrown)


           "Diga-me com q programas que eu te direi o q faras!!"
                                                       (xCrown)


                  "Se so Deus pode criar a vida, entao sou Deus"
                                                          (Azr)

   
          "Se vc programa, vc e' um criador,
                        se nao, vc e' um simples e misero usuario"
                                                     (X_cAmArO)
                              
CodersZine.
                   <>Ĵ INDICE <>       
                                                                
                                                                
                  INTRODUCAO.....................X_cAmArO       
                                                                
              Let's coder                                       
                1. ALGORITIMOS..................Jac{Delpher}    
                2. ASSEMBLY........................cr4sh^0v3    
                3. PASCAL..............................Mingo    
                4. COBOL............................X_cAmArO    
                5. C/C++..............................xCrown    
                6. DJGPP................................xROD    
                7. VISUAL C++.......................xCaption    
                8. VISUAL BASIC........................Rashi    
                9. VISUAL BASIC COM WINSOCK..........Hammett    
                10.DELPHI............................Progman    
                11.DELPHI COM ACTIVEX.................BADGod    
                12.JAVA.........................Jac{Delpher}    
                13.GRAFICOS...........................KDoskD    
                14.GRAFICOS EM 3D.........................hC    
                15.DEMOSCENE...........................Mingo    
                16.REDES NEURAIS ARTIFICIAIS.............Wiz    
                                                                
              About CodersGroup                                 
                  E-MAILS RECEBIDOS.........Coders Editors      
                  QUEM SOMOS??..............Coders Editors      
                  AGRADECIMENTOS............Coders Editors      
                  SOME LINKS................Coders Editors      
                                                                
CodersZine.



            <>< INTRODUCAO ><>
                                                            

     Ate' que enfim saiu. O primeiro demora mas sai! Putz, e tinha gente que
 estava quase desistindo. Bah, pensei que fosse bem + facil fazer  um  zine,
 mas agora que saiu, e' so' alegria...

     Um pouco de historia...
     Era uma vez um knal de IRC chamado #Programadores, onde  a  maioria  de
 nos costumava se encontrar, mas que por uma serie de brigas entre  founders
 e operadores, gerou o #Coders (se vc ainda nao entendeu, quem  programa  e'
 um coder), e e' desse novo knal que surge nosso zine.
      Tantos zines por ai, e nenhum sobre programacao, pronto agora  existe,
 boa sorte. ;)
     Talvez, publicaremos o zine bimestralmente, pois quase todos  trabalham
 e estudam, e alem do mais, estamos pensando na qualidade. Talvez lancaremos
 outras  materias ,  tipo  ultimas  novidades  na  programacao,   dicas   de
 programacao e fluxogramas, e talvez outras coisas que nao tem  relacao  com
 programacao, mas isso e' uma outra historia. :-]

     Fizemos esse zine pensando no futuro de vcs. Acreditem.. Muitos  paises
 formam muito menos programadores do que precisam. Hmm.. talvez publicaremos
 algumas coisas sobre como montar um curriculum.

     Ahh.. outra coisa.. tirei toda a acentuacao do zine, para ficar  melhor
 visualizavel nos diferentes editores que existem, porem  pode  ter  passado
 algum acento.. mas.. nosso logo fica melhor mesmo e' no edit.com.

    Esperamos a colaboracao de vcs, mandando mails e divulgando nosso  zine.
 Obrigado.

               
   Lembre-se: qualquer texto ou exemplo retirado daki, podera ser publicado
      somente se indicado junto o nome do autor e de onde foi tirado.     
                         -  Construa, nao copie!  -
               

    Vou parar por aki, pq eu sei que ninguem le  a  introducao,  todo  mundo
 vai direto a pratica. :o)

                                                  by X_cAmArO


CodersZine.




       <><<<  LET'S CODER  >>><>


                La' vao as materias, facam bom proveito.. ;^)
    Mas lembre-se: nao fiquem so' por aki, leiam livros e tutoriais, pois
           hj em dia esta phoda p/ se encontrar um bom programador.




                < ALGORITIMOS >
                                                  by Jac{Delpher}


     Ola pessoal, estou escrevendo a materia sobre Algoritmos  (e' mesmo??).
 Ah, e tambem irei escrever sobre JAVA e  JAVASCRIPT.  Aguardem  e  confiem.
 Bom, infelizmente, eu queria que o dia tivesse mais de 24 horas, so pra  eu
 poder escrever com mais calma essa materia. Mas tudo bem, eu so  vou  furar
 com a data de entrega da revista. Espero que o X_cAmArO compreenda e adie o
 dia do lancamento da revista mais  uma  semaninha :)).  Mas  vamos  ao  que
 interessa.

     Aos queridos leitores, que programam ou desejam programar, eu  antecipo
 uma coisinha: vc nao aprende a mexer em uma linguagem de programacao.Nao e'
 como o MS WORD, onde vc sai futucando e acaba fazendo um texto lindo.  Para
 se fazer um sistema de computador, e' necessario  uma  base  teorica  muito
 forte. Digo   isso  por  experiencia  propria.  A  maioria  dos  cursos  de
 linguagens de programacao ensinam a fazer o programa hello world!,  como  o
 primeiro programa que vc faz. Francamente, eu nao consideraria isso como  o
 meu primeiro programa, pois isso ate uma crianca de 6  anos  faz.  Isso  e'
 muito facil na pratica, vamos ver em varias linguagens:

 Em Delphi: ShowMessage ('Hello World');
 Em Visual Basic: MsgBox ("Hello World") { nao programo nessa linguagem, mas
                                  sei fazer esse programa, tah vendo? }
 Em C: printf ("Hello World");
 Em Pascal: WriteLn ('Hello World');

     Bom, como vcs podem ver, isso e' muito facil de fazer,  mas  certamente
 isso nao e' a primeira coisa a se aprender. Mas por incrivel que pareca  e'
 isso que as escolas de informatica ensinam no inicio do aprendizado de  uma
 linguagem. Algumas ate dao cobertura a materia de Algoritimos, mas  dao  um
 curso fajuto de 14 horas. Nao sabe eles que isso e' o primordial. Entao, e'
 isso que pretendo fazer nessa revista. Ah, e outra coisa,  aos  iniciantes,
 leiam primeiro a minha materia e  depois  o  resto,  ok?  Essa  materia  e'
 temporaria. Acho que na proxima edicao da revista, eu jah acabo.  E  espero
 que o X_cAmArO concorde que eu passe um pouco de  Estrutura de Dados.  Acho
 que incluirei os dois juntos, nao sei. Vamos ver. Bom, mas vamos comecar.

     Como eu havia falado, para se escrever um programa  de  computador,  e'
 necessario uma boa  base  teorica,  principalmente  sobre  Algoritmos.  Mas
 finalmente, o q e' Algoritmo?
 ---> Pessoal, imaginem o seguinte. Vou  dar  um  exemplo  um  tanto  quanto
 radical: para um ser humano andar (e outros animais  tbm!),  eles  precisam
 das pernas, isso e' primordial, certo?  Muito  bem.  Para  se  escrever  um
 programa  de  computador  ( ou  programar,  simplificando ),  a  LOGICA  DA
 PROGRAMAcAO equivale as pernas da gente.  Ou  seja,  para  andar,  a  gente
 precisa  das  pernas,  para  programar,  nos  precisamos   da   Logica   da
 Programacao!(que se resume aos Algoritmos e Estrutura de Dados!). Entendeu?

     Entao, outro exemplo legal e' que, quando  nos  aprendemos  equacao  de
 segundo grau, primeiro o Professor nos mostra a formula ax + bx + c = 0. E
 depois nos substituimos os valores de a, b, e c por numeros e  solucionamos
 a equacao, certo? Pois entao, para se construir um sistema, o  mesmo  passa
 por varias etapas. A primeira delas e' o projeto ou analise (que  e'  feita
 puramente em algoritmos, junto  com  alguns  diagramas).  Esse  projeto  e'
 justamente a parte teorica do sistema. Se voce  for  fazer  for  comecar  a
 fazer um sistema simplesmente pensando: "poxa! vou fazer  um  sistema.  Vou
 passar a noite acordado digitando codigo!". Ai e'que vc se engana, meu caro
 amigo. Se esse tal que pensa assim for iniciante,  certamente  ele  tentara
 copiar o codigo de algum outro sistema, jah que existem milhoes de  codigos
 espalhados pela rede. E ainda mais diz que foi ele mesmo que fez. Bom, alem
 disso  ser  uma  atitude  completamente  Lamah,  o  que  adianta  viver  de
 aparencia? O gosto vai ser melhor quando a coisa e'feita por vc mesmo e com
 muito esforco. Ai vc realmente sente o gosto da vitoria! Mas isso foi  mais
 um desabafo e serve de conselho para vcs iniciantes. Ah, e pedir ajuda  aos
 mais experientes nao significa que vc seja um Lamah. Os experientes  sempre
 iram te ajudar com o maior bom gosto.

     Bom, isso serviu de conselho. Isso tudo e' pra  explicar  que  para  se
 construir um sistema, tem que se ter um projeto antes da pratica. Tah certo
 que a parte de codificacao e' a melhor, mas ela sera  muito  melhor  se  vc
 projeta-la completamente antes. A conclusao para a construcao de um sistema
 jah pode ser definida:

 Projeto ou Analise do Sistema (Algoritmos e Diagramas) --> Codificacao  -->
 Teste, Teste e Teste.

     Entao, como Dr. Niklaus Wirth (criador da linguagem Pascal) menciounou:
 "Programas sao formulacoes concretas de algoritmos abstratos,  baseados  em
  representacoes e estruturas especificas de dados".

     E' incrivel como as palavras  de  um  Cientista  sao  valiosas.  Sempre
 conversem  com  Cientistas  quando  vcs  puderem ,  eles  sao  a   voz   da
 experiencia :)).

    Depois de todo essa "baboseira", podemos definir ( formalmente! ) o  que
 e' algoritmo:

 ͻ
   Algoritmo e' a descricao de um padrao de comportamento, expressado em  
   temos de um repertorio bem definido e finito de acoes "primitivas",    
   das quais damos por certo que elas podem ser executadas.               
 ͼ

 Diante dessa explicacao, observe o seguinte:

 "Ir ao supermercado";
 "Fazer as compras";
 "Pagar os produtos";
 "Voltar para casa";

     Observe que todas as  frases  acima  sao  acoes ( finitas, por sinal ).
 Pode-se considerar que cada acao dessa e' um  comando  e  que  tem  um  fim
 delimitado pelo ;. Isso e'um exemplo de agoritmo, embora que abstrato.  Mas
 por incrivel que pareca, algoritmo e' apenas a resolucao de um  determinado  problema.
 Nesse caso, o problema e' fazer as compras. Mas e se surge um incoveniente?
 Se, por exemplo, quando ela for pagar as compras  ela  nao  tiver  dinheiro
 suficiente? Logicamente ela teria que devolver todos os produtos.

 Escrevendo um novo algoritmo:

 "Ir ao supermercado";
 "Fazer as compras";
 Se "o dinheiro e' suficiente" entao
    "Pagar os produtos"
 se nao
    "Devolver os produtos"
 "Voltar para casa"

     Ai nos ja nos  deparamos  com  uma  estrutrura  condicional.   Isso  e'
 essencial. Vcs vao notar, que ao escrever um programa, vcs  imaginaram,  na
 pratica, varias hipoteses. Por  exemplo,  se  o  usuario  do  seu  programa
 digitar o CPF errado, certamente vc tera que dar uma aviso  a  ele,  certo?
 Pois entao, e' isso!

 Pessoal, isso e'so um introducao mesmo, na proxima edicao eu jah vou acabar
 essa materia (ao menos espero que sim!), entao, aguarde e confie!  Abracao!

 Jac{Delpher} ---> qualquer coisa, envie o e-mail p/ javanes@thepentagon.com



CodersZine.



                 < ASSEMBLY >
                                                        by cr4sh^0v3


 /*  Bom, queria comecar agradecendo o convite para participar desta  talvez
 arrogante, porem acertada e aprovada iniciativa do pessoal  do  #coders  da
 BrasIRC. Sem muito tempo, infelizmente (p/ mim, e felizmente  p/  vcs)  nao
 poderei entrar muito em detalhes, mas como sei que para  a  grande  maioria
 Assembler eh um bicho de sete cabecas...eu vou fazendo aqui minha parte  de
 cavaleiro e vou cortando as  6(seis)  sobressalentes...  aproveitando  para
 introduzi-los ao mundo binario e as nocoes basicas desta linguagem.
     Para comecar, quero deixar claro, que me considero um  iniciante  nesta
 linguagem tb, assim como aprendiz em tudo o resto a  que  se  diz  respeito
 nesta vida... afinal, a cada dia aprendemos uma nova licao...
     Entao, deixemos o "bla bla bla" de lado, e ... COMECEMOS! */

 -------------------------------cute here-----------------------------------

     Todos nos temos uma certa concepcao sobre o que um computador  faz.  No
 entando trataremos  do  computador  neste  artigo,  como  uma  maquina  que
 manipula bits. Parto desde ja, da ideia de que todos a  lerem  este  artigo
 tem uma ideia ainda que vaga sobre o que seria um "BIT".
     Um "bit"  tem  dois  estados:  ON/OFF,  ou  LIGADO/DESLIGADO (ou  ainda
 VERDADEIRO/FALSO), representados por "0"'s e "1"'s. Nao pense em "0" e  "1"
 como numeros, sao apenas convencoes p/ nomearmos o estado de  um  "bit".  A
 memoria no seu computador consiste de uma enorme colecao de "bits", cada um
 podendo estar em "0" ou "1" ("on" ou "off").
     O centro de seu computador pode ser interpretado, como o coracao  dele,
 e e' um microprocessador, chamado  de  8088  pela  Intel  (claro  que  aqui
 generalizamos pela grande maioria,  ainda  que  realmente  o  "batismo"  do
 "chip" tenha sido feito por ela, o que nao cabe discutirmos aqui...). O que
 esse processador faz e' manipular os bits que  compoem  a  memoria.  O  seu
 processador gosta de lidar com bits em grupos, e entao introduziremos  aqui
 nomes especiais para os dois tamanhos de  grupos  de  bits  que  satisfazem
 usualmente o 8088. Um "byte" refere-se a uma colecao de  8(oito)  bits.  Um
 "word" consiste de 2(dois) bytes, ou consequentemente, 16(dezesseis)  bits.
 Uma colecao de bits tem um determinado padrao ou modelo,  determinado  pelo
 estado individual de seus bits. Aqui temos alguns modelos tipicos de bytes:
    10101010    11111111    00001111

     Se voce ja estudou probabilidade, e' facil deduzir que  ha  256 modelos
 possiveis de um byte. De modo analogo, um "word" pode  ter  65,536  modelos
 diferentes.

     Bem, agora vamos a ideia principal da programacao  em  Assembler.  Voce
 esta sentado? :-)  Estes modelos de bits podem ser usados para  representar
 outros conjuntos de coisas, projetando-se cada modelo em um membro do outro
 conjunto. Nao parece muito...,mas a IBM faturou BILHOES com essa ideia.

     Por exemplo, associando-se os modelos de uma "word" a  um  conjunto  de
 INTEIROS, voce pode representar tanto os numeros  de  0  a  65535  como  os
 numeros de -32768 a 32767 , dependendo da associacao exata que  voce  usar.
 Voce pode reconhecer esses  intervalos  como  os  intervalos  possiveis  de
 numero de linhas, e dos possiveis  valores  de  uma  variavel  inteira,  em
 BASIC; assim tambem como outras situacoes em programacao, e  claro...  isso
 nao e' por acaso. Isso explica de alguma forma esses limites arbitrarios..:
 BASIC usa "words" de memoria para guardar  numeros  de  linha  e  variaveis
 inteiras.

     Como um outro exemplo, voce poderia associar as formas(ou modelos)  que
 um byte pode assumir  a  uma  serie  de  pequenas  figuras  arbitrariamente
 escolhidas que poderiam ser colocadas numa tela de video. Se voce olhar  no
 Apendice G do seu manual de  BASIC,  voce  notara  que  ha  exatamente  256
 caracteres diferentes que podem ser mostrados na sua tela. O seu computador
 usa um byte de memoria para informar qual caracter deve  ser  mostrado,  em
 cada posicao da tela.

     Sem querer me adiantar muito, posso  mencionar  que  ha  cerca  de  256
 operacoes fundamentais que o  microprocessador  8088  pode  executar.  Isso
 sugere uma outra associacao que nao cabe agora...,mas deve ser discutida em
 detalhes mais adiante, quem sabe na proxima edicao!??
     A ideia principal desta parte e' que podemos usar modelos de bits  para
 representar qualquer coisa que  quisermos,  e  manipulando  os  modelos  de
 diferentes formas nos podemos produzir resultados significativos em  termos
 do que escolhemos representar.

 --------------------------------cute here----------------------------------

 /* baboseira follows
   Chega de chatice,ne!? Fica p/  proxima,... assim  que  eu  for  convidado
   novamente... e entao posso introduzir-lhes o  "Sistema  de  Notacao  Para
   Modelos de Bits". Espero que possa ter tirado  um  pouquinho  o  medo  de
   Assembler de voces, ou pelo menos que tenha deixado voces um  pouco  mais
   a vontade quando se tratar sobre os principios da  programacao  de  baixo
   nivel. E antes de mais nada, peco aos que se assustaram ainda  mais,  que
   nao desistam, talvez eu nao seja o mais indicado, e alem de  tudo...  nao
   se pode compreender tudo, ainda mais, quando se explica pela metade ;-]

   Thanks and Thoughts:
   xcaRIOca,X_cAmArO,Rashi,hC,Wiz, e toda a galera do #coders... rZ! */



CodersZine.




                 <   PASCAL   > 
                                                         by Mingo

     
     PASCAL,  uma  linguagem   das   mais   difundidas   mundialmente.   Com
 compiladores para as mais diversas linhas de  computadores,  incluindo  ate
 mesmo MAINFRAMES. Criada para o ensino da logica e programacao.
     Muito  utilizada  para   o   aprendizado   principalmente   voltado   a
 conceituacao de  linguagem  estruturada.  Facil  de  aprender,  entender  e
 depurar. Seus comandos sao baseados em palavras da lingua inglesa.
     E' muito recomendado o aprendizado de PASCAL antes de se aprender  C  e
 DELPHI. PASCAL e C sao linguagens muito proximas, principalmente  quanto  a
 estrutura. O DELPHI consiste em uma evolucao do PASCAL.
     Os  primeiros  compiladores  de   PASCAL   para   computadores   IBM-PC
 compativeis deixavam um pouco a desejar. Sendo  que,  com  a  evolucao  dos
 mesmos, em pouco tempo se equipararam com os compiladores C.
     Hoje dispomos de diversos compiladores de PASCAL no mercado. O que mais
 se destaca e o da BORLAND, porem o  mesmo  foi  descontinuado.  Com  grande
 destaque encontramos tambem o TMT  PASCAL  (SHAREWARE)  com  registro  pela
 internet e o FPK-PASCAL (FREEWARE). Existem compiladores de menor  destaque
 porem eficientes, como o STONY BROOKY PASCAL+.

     Vamos entao a um famoso exemplo:
     BEGIN
     WRITELN('Alo, Mundo!');
     END.

CodersZine.




                  <  COBOL  >
                                                        by X_cAmArO


      Wala all! Olha eu aki de novo... maos a obra..

  Alguns ja' devem ter pensado: 
      
   - Por que aprender Cobol??  Cobol ja morreu!!

     Na verdade, nao e' bem assim.
     COBOL(COmon Business Orient Language), apesar  de  ser  antigo  eh  uma
 linguagem usada por cerca de 80% das grandes empresas brasileiras, pois tem
 muita facilidade em gerenciar grande massa de dados. Ai que chato...
 imagine vc, desenvolvendo um simples  programinha  para  gerar  relatorios,
 cobrando, quem sabe, alguns milhares de reais.. hehe.. acho que exagerei :)
     Cobol nao e' bem o meu forte, mas acho que posso passar aguma  coisa...

 Antes, da pratica, um pouco de historia...

     O Cobol apareceu em 1959,  gracas  ao  Cap.  Grace  Murray  Hopper,  da
 marinha dos EUA. Na epoca queriam uma linguagem  que  fosse: mutavel (capaz 
 de suportar mudancas e melhoramentos) e de ser altamente  portavel (escrito
 para um IBM pudesse tbm rodar em um UNIVAC ou TRS-80 - acho que nao sao  da 
 epoca de vcs, e muito menos da minha ).  ;o)

     Normalmente,todo programa em COBOL e' dividido em 4 partes,  que  devem
 seguir a seguinte ordem:

 IDENTIFICATION DIVISION -  Contem o nome do programa, de quem o escreveu, e
 mais algumas informacoes opcionais. E'  muito  simples.  So'  Program-id  e
 Author sao obrigatorios.

       Identification Division. 
       Program-Id.     Prog00.       <-- nome do programa
       Author.         X_cAmArO.     <-- nome do autor
       Date-Written.   05-05-97.     <-- dia escrito
       Date-Compiled.                <-- dia compilado, o compilador coloca
       Installation.   No trabalho.        <-- lugar onde foi feito 
       Security.       Prog exemplo p/ o   <-- comentario sobre o programa
                       CodersZine00.       <-- comentario sobre o programa


 ENVIRONMENT DIVISION -  E' formada por duas secoes, a Configuration Section
 onde fica  o  Source-Computer (computador onde foi feito) e Object-Computer
 (onde sera usado),  servem  apenas  p/  documentacao  e  formado  tbm  pela
 Input-Output Section onde sao declarados os arquivos de entrada e saida (p/
 o COBOL a impressora eh um arquivo de saida). 
 
       Environment Division.   
       Configuration Section.       <-- nome da sessao
       Source-Computer. IBM PC.    
       Object-Computer. IBM PC.    
       Special-Names.               <-- nomes especiais
           Decimal-Point Is Comma.  <-- define que a casa decimal e'separada
                                           por virgula


 DATA DIVISION - Tbm dividida em duas secoes, File Section e Working-Storage
 Section. Na File Section,  sao definidos os campos e registros dos arquivos
 usados. Na Working, sao declarado as variaveis que nao sejam arquivos.  Pic
 e' uma mascara de entrada (qtdade e numero de caracteres aceitos), Pic 9999
 e' igual a Pic 9(4). Para aceitar somente numeros, coloca-se 9, pra  letras
 e numeros coloca-se X. Ex.: Pic X(12). Nesse exemplo, nao coloquei  a  File
 Section, pois nao declarei arquivos nesse programa.

       Data Division.   
       Working-Storage Section.    <-- nome da sessao
       77  Num1                           Pic 9999.
       77  Num2                           Pic 9(4).
       77  Resul                          Pic ZZZZZZZ9.


 PROCEDURE DIVISION - Contem toda a logica do  programa,  ou seja,  contem a
 descricao das intrucoes que serao executadas pelo sistema.  Pode ser divida
 em paragrafos (sub-rotinas).
 
       Procedure Division.
       Inicio.
           Display (01, 01) "Digite o primeiro numero: ".  <-- exibe na tela
           Accept (, ) num1.
           Display (02, 01) "Digite o segundo numero: ".
           Accept (, ) num2.
           Compute                    <-- permite vc usar sinais aritmeticos
              Resul = Num1 + Num2.    <-- coloca a soma  na  variavel  resul
           Display (04, 03) "A soma e' : ", resul.    <-- exibe  a  variavel
           Stop run.


 Obs. Para  testar, e' so' juntar os exemplos na ordem certa. Nao se esqueca
 de manter as colunas e tirar  os  comentarios.  Cole,  em  um  arquivo  com
 extensao .cob (tipo.. program1.cob).


 NUNCA SE ESQUECA!!
 Dos pontos nos finais das linhas... 

 E das regras das colunas:
 * 1  a  6, eram  usadas  p/  identificar  as  linhas,  mas  agora,  com  as
   atualizacoes do compilador, elas nao sao mais necessarias, porem, tem que
   permanecerem em branco.
 * 7, utilizada p/ caracteres especiais:
      - (traco) separacao de literais; se a linha de comando nao couber ate'
          a coluna 72, na proxima linha colocar um traco e continuar.
      * (asterisco) = comentario; colocar asterisco, e escrever o comentario    
 * 8 a 11 chamadas area A,onde comecam obrigatoriamente o nome das divisoes,
   das secoes e dos paragrafos.
 * 12 a 72 chamadas area B; o compilador so' reconhece ate essa coluna.

     Existem diversos compiladores de Cobol,  aki,  uso  o  Microsoft (argh)
 Cobol 2.10.

              Por enquanto e' so', proxima edicao tem mais..  
           []'s a todos do #Federal que tbm sao coders como nos.                                                                   



CodersZine.



                  <    C/C++   >
                                                        by xCrown
     

     Primeiramente eu queria agradecer a todos que me cederam um lugar  para
 colocar minhas ideias para serem passadas para a elite de  programadores do
 Brasil. Fico muito feliz pelo que este pessoal esta fazendo  e  espero  que
 nunca acabe esta rede de fraternidade para contruir um futuro  melhor  para
 todos.

     Um pouco sobre a linguagem C.

     A linguagem C tem uma longa historia, criada nos  laboratorios  bell  a 
 a linguagem C teve varios nomes e mutacoes ate chegar no  que  e'  hoje.  A
 linguagem C surgiu a partir de uma linguagem chamada B (Criada no final dos
 anos 60 por Ken Thompson ). O resto desta historia voce pode  encontrar  em
 qualquer livro de linguagem C.  Na verdade estou aqui para iniciar o leitor
 na linguagem C.
     Todos dizem diversas coisas sobre a linguagem C.  Alguns dizem C,  C++,
 Turbo C, etc...  Na verdade nao existe um nome  altamente  apropriado  para
 esta linguagem. Entre estes nomes muda pouca coisa. Mas vale voce saber o q
 voce esta usando.

     Entendendo a logica de sintaxe da linguagem C.

     Todos dizem q a linguagem C e' um bixo de 7 cabecas. Na  verdade  todos 
 que dizem isso ou estao aprendendo ou nao tiveram uma boa orientacao  sobre
 esta linguagem.  Basicamente voce tem  que  entender  q  para  escrever  um
 programa voce tem q escrever uma serie de instrucoes para  q  o  computador
 execute cada uma delas.

   main()       <- Cabeca do programa
   {
          clrscr();     <- instrucao que limpa a tela
          printf("Ola mundo... pra variar");     <- Instrucao  q exibe   uma
                                                    mensagem na tela.
       return 0;
   }

     Este e' um programa simples q mostra q a linguagem C nao e'um bixo de 7
 cabecas.  Este programa esta dividido em cabeca ( "main()" ),  chaves  onde
 as  instrucoes  sao escritas com "{ }" e  as  instrucoes  q sao delimitadas
 pelas chaves.  Ha tambem algumas coisas que  voce  tem  que  obedecer  como
 colocar um ";" no final de cada instrucao  para que  o  compilador  entenda
 que a linha foi terminada.
     Agora eu vou explicar a utilidade de cada linha do  programa  para  que
 voce entenda melhor.

        "main()" ->  main()  tambem e' uma instrucao,  so' que ela  funciona
     diferente. Ela avisa ao computador onde  o  programa  comeca.  MAIN  na
     verdade significa PRINCIPAL.

        Chaves "{ }" -> Sao tambem bastante importantes por que sao elas que
     reunem quase todas as instrucoes escritas para o programa. O computador
     so consegue ler a instrucao principal ( no caso main() ) e  o que  esta
     dentro das chaves. Se  alguma  instrucao  estiver  fora  das  chaves  e
     causando um erro. Sendo assim voce  tera  que  colocar  todas  as  suas
     instrucoes dentro das chaves.

     Quanto  as  outras  instrucoes  que  ficaram  dentro  das  chaves,  sao
 instrucoes simples que eu vou explicar na proxima zine.

     Ta vendo! Este foi o aspecto mais importante q voce  deveria  notar  na
 linguagem C. Nao e' uma coisa monstruosa como todos dizem. E' ate  bastante
 simples.
     Bom, acho que ate aqui ja esta bom. Nao tive muito  tempo para elaborar
 melhor  esta  materia  e  me  desculpem  os erros de portugues.  Na proxima
 vou explicar sobre  funcoes, comandos, compiladores  q  podem ser  usados e
 entrar de cabeca no mundo da criacao de jogos e demos.
     Queria   novamente   agradecer   todos  os   camaradas   do  #Coders  e
 principalmente ao X_cAmArO que me cedeu este espaco na Zine.

                                       Aste a proxtche.
                         E lembrem-se: "Nao programar faz mal a saude."
                 Caso alguma duvida mande um mail para fenix@netpatos.com.br



CodersZine.



                   <   DJGPP   >      
                                                        by xROD


    O que e' DJGPP?

    DJGPP e' um compilador de C/C++ para DOS, que opera em modo protegido  e
 e' 32-bits. Esse compilador funciona em DOS e em Linux.
    URL: http://www.delorie.com/djgpp/

 Por que obter o DJGPP?

    Como ja foi dito, ele opera em modo protegido e e' 32-bits.
     Mas esse nao e' o principal motivo para  obter  o  DJGPP.  O  principal
 motivo e' que ele e' gratis! Isso e' bom, nao e'? E tem mais: se voce fizer
 um jogo com o DJGPP, voce pode vende-lo, independente de voce ter  comprado
 o DJGPP ou pego de graca na Internet.
     Alem disso, a id Software usou o DJGPP para fazer o famoso jogo Quake.

 Oba! Onde eu pego esse DJGPP?

     O compilador DJGPP e' distribuido em varios  FTPs  ao  redor  do  mundo
 (incluindo dois aqui no Brasil), atraves de varios arquivos, de modo que e'
 muito facil pegar os arquivos  errados. Mas,  para  nao  se  enganar, va ao
 endereco  http://www.delorie.com/djgpp/zip-picker.html .   La   voce   pode
 escolher os itens que voce quer, as linguagens que vai usar, se vai  querer
 editor (eu recomendo), bibliotecas adicionais, e ainda pode escolher  entre
 uma grande lista de FTPs. Aperte o botao, e, dentro de instantes, voce  vai
 ver os arquivos que precisa, com links para o FTP que voce escolheu.
     Beleza,  ne?  Agora  e'  so   pegar   os   arquivos   ( que   totalizam
 aproximadamente  10  megabytes).  Descompactados,  sao  mais  ou  menos  20
 megabytes.
     E agora, o que eu faco com esses arquivos todos?
     Eu imagino que voce tenha ou PKUNZIP, ou WinZip, ou UNZIP,certo? Se nao
 tem nenhum deles, procure adquirir algum, sao muito importantes.
 Siga esses passos para instalar o DJGPP
    1. Crie um diretorio (pasta). Por exemplo: C:\DJGPP
    2. Agora descompacte todos os arquivos para essa pasta.
       Se voce usa PKUNZIP:
         PKUNZIP -d arquivo.zip C:\DJGPP
       Se voce usa UNZIP:
         UNZIP arquivo.zip C:\DJGPP
       Se voce usa WinZip, basta sair clicando :)
       Sendo que "arquivo.zip" e' o nome do arquivo a descompactar.
    3. Pronto para usar? Que nada... Primeiro, e' bastante recomendavel  que
       voce coloque o DJGPP no PATH do autoexec.bat. Para fazer isso,  basta
       ver onde tem SET PATH=...  e  acrescentar  C:\DJGPP\BIN.   Lembrando,
       deve sempre haver um ponto-e-virgula (;) entre um diretorio e  outro.
    4. Opa, nao feche o autoexec.bat  ainda...  Para  finalizar,  voce  deve
       incluir no autoexec.bat:
         SET DJGPP=C:\DJGPP\DJGPP.ENV
    5. Reinicie o computador.
    Agora tente digitar GCC. Se apareceu a mensagem:
         gcc.exe: no input files.

   entao pode comecar a comemorar: voce instalou tudo certo. Mas, se nao deu
 certo, meus pesames...

 Como eu compilo meus programas?

 Por enquanto vamos compilar um simples .C:

      GCC arquivo.c -o arquivo.exe

     Sendo que "arquivo.c" e'  o  seu  codigo-fonte  e  "arquivo.exe"  e'  o
 arquivo .EXE que sera gerado a partir do seu codigo-fonte.

 Quais as diferencas entre o DJGPP e outros compiladores de C?

     Vamos tomar como base o Borland C++ 3.1.
 Eis algumas diferencas que eu constatei entre o DJGPP e o BC++ 3.1:

    Os arquivos .OBJ nao sao de fato .OBJ. Sao .O, e incompativeis  com  os
 arquivos .OBJ. Ou seja, se voce quer compilar qualquer coisa junto  com  um
 .OBJ, simplesmente nao vai dar certo, porque o DJGPP so aceita .O.
    Do mesmo modo, no subdiretorio LIB voce nao vai encontrar arquivos  com
  extensao .LIB, e sim com extensao .A. Ou seja,  o  DJGPP  tambem  nao  vai
 aceitar as .LIBs do seu outro compilador.
    No DJGPP ha algumas LIBs e comandos novos. Um exemplo de comando  novo:
 _go32_dpmi_set_protected_mode_interrupt_vector;  assustador,  nao? :).  Mas
 fique calmo, nao sao todos os comandos novos que sao assim.
    Voce nao pode utilizar asm { ... }. Em vez  disso, voce  deve  utilizar
 __asm__ { ... }. Parece simples, nao? Mas nao e'... Provavelmente voce esta
 acostumado a utilizar a sintaxe de Assembly da Intel, que e' a utilizada em
 programas como TASM, MASM, NASM, etc. Mas o ASM do DJGPP utiliza a  sintaxe
 AT&T, que tem algumas grandes diferencas.
    Os arquivos de C++ agora tem extensao .CC.  Mas  isso  nao  quer  dizer
 nada, voce pode gravar como .CPP, nao tem problema... So muda mesmo o nome,
 o resto e' igual (formato, comandos, etc.).
                                                  
 Divirta-se!

 /*
  *   Copyright (C) 1998 - "Rodrigo Rocha Gomes e Souza" <rod@svn.com.br>
  *   xROD do #Coders. (BrasIRC)
  *   Todos os direitos reservados - Nao modifique! hehehehehe
  */
 
 #include <stdio.h>
 
 void main() {
   printf("Alo, Mundo!\n");
 }



CodersZine.




                 < VISUAL C++ >
                                                        by xCaption 


     Apresentando o Visual C++

     O Visual C++ 5.0  e' uma  ferramenta  de  programacao  em  32-Bit,  com
 ambiente de desenvolvimento integrado(IDE) rodando em Windows. Seu ambiente 
 integra praticamente todos os requisitos para a geracao  de  um  aplicativo
 Windows. Em sua janela de projeto estao o ClassWiew - Manipula  as  classes
 e/ou funcoes definidas em seus projetos, como uma hierarquia; O  FileView -
 que exibe os arquivos de projetos; O ResourceView - Manipula os recursos de
 seu projeto, como menus, icones e caixas de dialogos; InfoWewer - O Sumario
 da ajuda on-line interna do VC++. O VC++ conta com a  biblioteca  MFC,  que
 prove uma aproximacao orientada a objeto para  desenvolvimento  de  Windows
 que pode salvar tempo, e tambem  pode  fazer  o  desenvolvimento  processar
 muito menos doloroso que e' quando voce usa a API no osso.  Em nosso  caso,
 iremos estudar no osso, nao MFC por enquanto. 

     Criando o Projeto Generic

     A partir do IDE do VC++, no menu File clique sobre New  ao  aparecer  a
 caixa de dialogo New clique na guia Project e selecione  Win32  Application
 da lista, na caixa Project Name entre com o nome do nosso projeto: Generic,
 na caixa Location entre com o caminho onde o diretorio base de projeto(como
 mesmo nome do projeto) vai ficar e clique em OK. 
     Neste ponto, com projeto vazio criado  precisamos  agora  adicionar  os
 arquivos de projeto, porem antes  vamos  dar  uma  olhada  no  processo  de
 criacao de um .EXE no Windows:
     Todo o codigo fonte (.c/.cpp) e' compilado em  .obj's  e  o  script  de
 recursos (.rc) e' compilado em .res. O .rc e' opcional voce pode  criar  um
 .exe somente com codigo sem recursos.

     Implementando o Projeto

     Adicionando o fonte

     Iniciando

     Voce pode ter varios arquivos de fonte em seus projetos, mas neste caso
 teremos apenas um.
     Para incluir o arquivo de codigo fonte em  seu  projeto  no  menu  File
 clique sobre New ao aparecer a caixa de dialogo New clique na guia Files  e
 selecione C++ Source File (tanto para c ou c++), na caixa  Filename  digite
 main.c e clique em  OK. O VC++  criou  o  arquivo  vazio  e  adicionou  sua
 referencia ao projeto, como voce pode ver na  janela  de  projeto  na  guia
 FileView, e tambem abriu o arquivo para voce, vamos entao ao codigo:

     Incluindo cabecalhos(Headers). 

     Temos que incluir  o  windows.h,  esse  header  e'  requerido  para  os
 programas escritos para windows, nele e em outros incluidos por ele, contem
 todos os prototipos das funcoes,  tipos  de  dados  definidos,  constantes,
 entre outras coisas que vamos utilizar.
     tambem incluimos o resource.h que e' o header que contem as  constantes
 dos recursos. Para nos referenciarmos no codigo fonte a  um  recurso,  este
 arquivo e' requerido.

     #include <windows.h>
     #include "resource.h"

     Declarando prototipos. 

     Nesse caso temos somente um prototipo: o da funcao de janela, a qual  o
 Windows chama quando ocorre algum evento, como veremos mais adiante.

     LRESULT WINAPI MainWndProc (HWND, UINT, WPARAM,LPARAM); 

     Declarando variaveis globais. 

     A unica variavel global que iremos declarar neste modulo e'  ghInstance
 que contem o  valor  da  instancia  do  aplicativo.  Cada  copia  da  mesma
 aplicacao que e' executada recebe uma instancia diferente.

     HANDLE ghInstance; 

     A Funcao WinMain. 

     Esta funcao e' o ponto de entrada do programa, e' chamada pelo  sistema
 quando inicializada o aplicativo. Seus parametros sao:

     hInstance -Identifica a instancia corrente do aplicativo.

     hPrevInstance -Identifica a instancia anterior  do  aplicativo.  Em  um
 aplicativo Windows de 32-Bit esse parametro e' sempre nulo, o  motivo  dele
 estar ai e manter a compatibilidade com aplicativos  escritos  para  outros
 ambientes como o Windows 3.1.

     lpCmdLine - Ponteiro para uma string que especifica a linha de  comando
 para a aplicacao, excluindo o nome de programa.

     nCmdShow - Especifica como a janela deve  ser  exibida  de  acordo  com
 constantes definidas em windows.h

     int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
 lpszCmdLine,int nCmdShow )
    {       

     Quando nosso aplicativo iniciar ele devera mostrar uma  janela  simples
 na tela, para isso devemos primeiramente  registrar  a  nossa  janela  para
 depois criarmos e exibi-la na tela. Declaramos aqui as variaveis locais  de
 WinMain, sao elas:

     wc - Que sera preenchida para o registro da janela.
     msg - Usada no loop de mensagens.
     hWnd - Ira receber um numero que identifica a janela criada (Handle).

     WNDCLASS wc;
     MSG msg;
     HWND hWnd;

     Podemos agora preencher a estrutura da classe de janela  (nao  confunda
 classe de janela com classes de C++), destacando alguns itens como:

     lpszClassName - String com o nome da classe da janela,  este  pode  ser
 definido por voce. Por exemplo o nome da  classe  da  janela  principal  do
 Microsoft Word e' OpusApp.
     lpfnWndProc - Ponteiro para a funcao de janela
     hInstance - Handle da instancia do aplicativo.
     hIcon - Handle do icone para a janela, conseguido com  uma  chamada  e'
 LoadIcon que veremos mais adiantes nos recursos.

     wc.lpszClassName = "GenericAppClass";
     wc.lpfnWndProc = MainWndProc;
     wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
     wc.hInstance = hInstance;
     wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
     wc.hCursor = LoadCursor( NULL, IDC_ARROW );
     wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
     wc.lpszMenuName = "";
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;

     Com a estrutura preenchida registramos a janela:

     RegisterClass( &wc );

     Fazemos uma copia da variavel da instancia da local para a global.

     ghInstance = hInstance;

     Criamos a janela e o seu handle e' atribuido a hWnd.

     hWnd = CreateWindow("GenericAppClass",
     "Generic",
     WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
     0,
     0,
     CW_USEDEFAULT,
     CW_USEDEFAULT,
     NULL,
     NULL,
     hInstance, 
     NULL
     );

     Finalmente exibimos a janela:

     ShowWindow( hWnd, nCmdShow );

     E entramos no loop de  mensagens  onde  os  eventos  serao  captados  e
 enviados a funcao de janela.

     while( GetMessage( &msg, NULL, 0, 0 ) ) {
     DispatchMessage( &msg );
     }

     Quando o ponto de execucAo chega aqui a  sua  funcao  de  janela  ou  a
 padrao recebeu uma mensagem WM_QUIT e fez GetMessage retornar 0 e o loop de
 mensagens parar. Entao e' retornado ao sistema o wParam de msg, que no caso
 e' o codigo de saida do programa.

     return msg.wParam;
     }

     A Funcao De Janela (MainWndProc)

     Esta e'a funcao que e' chamada a cada evento ocorrido na janela que ela
 esta associada. E' possivel por exemplo associar uma funcao de janela a uma
 janela ja criada de um  aplicativo  fazendo  com  que  voce  intercepte  os
 eventos antes que o aplicativo fique sabendo que ocorreu, alias e' mais  ou
 menos assim que o XCaption trabalha. Seus parametros sao:

     hWnd - Handle da janela.
     msg - Especifica a mensagem
     wParam - Informacao adicional da mensagem, o valor depende da mensagem.
     lParam - Informacao adicional da mensagem, o valor depende da mensagem.

     LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam,
 LPARAM lParam)
     {

     Faremos com que quando a janela for exibida um texto  colocado  em  sua
 area. Poderiamos simplesmente chamar a funcao da API TextOut para  escrever
 o texto e pronto mas nao e' tao simples. Tudo o que e' desenhado na  janela
 e' apagado quando esta se sobreposta por outra. Quando ela e' reexibida nao
 sobra mais nada. Porem quando isso ocorre o  windows  causa  um  evento  de
 redesenho enviando a janela a mensagem WM_PAINT. Processando essa mensagem,
 podemos manter  a  vida  do  que  ha  dentro  da  janela.  Declaramos  duas
 variaveis:

      ps - Que contem informacoes para o desenho
      hdc -que contem o contexto de dispositivo: dados que define os objetos
 graficos, seus  atributos  associados,  e  os  modos  graficos  que  afetam
 producao em um dispositivo
      szMsg - Buffer que vai receber a string dos recursos.

      PAINTSTRUCT ps;
      HDC hDC;
      CHAR szMsg[255];

     Das mensagens recebidas fazemos uma selecao das que nos  interessa  com
 um switch

      switch( msg ) {

     Para pegar o texto que esta nos recursos chamamos LoadString passando o
 identificador IDS_HELLO que e'  definido  no  resource.h  como  sera  visto
 adiante. A janela precisa ser repintada, nosso desenho e' apenas um  texto,
 para isso chamamos TextOut com o contexto  de  dispositivo  conseguido  com
 BeginPaint e o liberamos com a chamada a EndPaint.

      case WM_PAINT:
      LoadString ( ghInstance , IDS_HELLO , szMsg, sizeof(szMsg));
      hDC = BeginPaint( hWnd, &ps );
      TextOut( hDC, 10, 10, szMsg, lstrlen(szMsg) ); EndPaint( hWnd, &ps );
      break;

     Quando a janela for fechada  nossa  aplicacao  termina,  entao  devemos
 chamar PostQuitMessage para terminar o loop de mensagens.

      case WM_DESTROY:
      PostQuitMessage( 0 );
      break;

     Aqui deixamos a funcao  de  janela  padrao  cuidar  das  mensagens  nao
 processadas.

      default:
      return( DefWindowProc( hWnd, msg,wParam, lParam ));
      }

     Retornamos 0 quando a mensagem  for  usada  e  nao  necessitar  retorno
 especial.

      return 0;
      }

     Criando os Recursos

     Iniciando

     Nossa primeira aplicacao nao vai possuir muitos recursos, mas afinal  o
 que sao recursos?

     Todos  os  dados  adicionais  binarios  que  voce  inclui  para  o  seu
 executavel pode ser considerado recurso. Os recursos mais comuns do Windows
 sao  icones,  cursores,  menus ,  caixas  de  dialogo ,  bitmaps ,  fontes,
 aceleradores,  tabelas  de  string,  dados  de  versao,  alem  de  recursos
 definidos pelo o usuario, como por exemplo um .wav contendo som ou um  .avi
 contendo animacao.

     Um dos maiores beneficios dos recursos e'  o  fato  de  que  voce  pode
 alterar muitas coisas, incluindo as strings sem mexer em seu codigo  fonte.
 Tornando facil a producao de um aplicacao com diferentes idiomas.

     Para criar um recurso no menu File clique sobre New ao aparecer a caixa
 de dialogo New clique na guia Files e selecione Resource Script,  na  caixa
 Filename digite resource.rc e clique em OK. O VC++ criou o arquivo vazio  e
 adicionou sua  referencia  ao  projeto,  (alem  de  ter  criado  o  arquivo
 resource.h que vai conter todas as definicoes de constantes de recursos que
 serao compartilhadas pelo resource.rc e o main.c) como  voce  pode  ver  na
 janela de projeto na guia FileView, e tambem abriu  o  arquivo  para  voce,
 porem voce deve fecha-lo pois iremos trabalhar  diretamente  na  janela  de
 projetos no ResourceView.

     Inserindo uma tabela de Strings

     Vamos agora implementar  a  unica  string  que  o  aplicativo  usa  nos
 recursos: IDS_HELLO, a que nos referenciamos no codigo fonte, para isso  no
 menu Insert clique em Resource, quando a caixa de dialogo  Insert  Resource
 aparecer, selecione String Table da lista e clique  em  New.  O  editor  de
 strings e' exibido, clique com  o  botao  direito  na  primeira  linha,  ao
 aparecer o menu  clique  sobre  Properties,  na  caixa  de  dialogo  String
 Properties, em ID, digite IDS_HELLO e logo depois na caixa Caption  digite:
 "Hello  Word, hello  Excel!"  e  clique  no  X  para  fechar  a  janela  de
 propriedades.

     Vendo realmente o que foi feito

     O VC++ fez quase todo o trabalho para voce  nos  recursos,  porem  voce
 pode ver o que ocorreu e ate modificar manualmente  todo  o  trabalho, para
 isso no menu File clique sobre Open selecione os  arquivos:  resource.rc  e
 resource.h e selecione Text em Open As, clique em Open(Abrir).

     Compilando, Ligando e Testando

     Talvez voce se questione porque  estes  tres  passos  sao  apresentados
 juntos? A resposta e': sao feitos um atras do outro e voce  nao  precisa se
 preocupar, desde que o seu codigo nao  tenha  erros  de  compilacao  ou  de
 ligacao. Se isso ocorrer verifique a  listagem,  posteriormente  veremos  a
 depuracao de programas. Bem, pressione F5.



CodersZine.



                 < VISUAL BASIC >      
                                                           by Rashi


     O Visual Basic e' um ambiente de  desenvolvimento  de  aplicativos para
 Windows amigavel  e facil  de  aprender, utilizando uma  das linguagens  de
 programacao mais conhecidas  em  todo  o  mundo.  Quando  foi  criado,  seu
 objetivo era permitir que programadores que nao  conheciam  a  linguagem  C
 pudessem desenvolver aplicativos para Windows. Desnecessario dizer  que foi
 muito bem aceito.
     Hoje, em sua versao 5, este ambiente conseguiu se firmar  como  um  dos
 melhores ambientes de desenvolvimento do mercado, contando com recursos que
 antes so eram conseguidos mediante programacao  em  C. Alem  dos  programas
 convencionas, o VB pode tambem criar controles e bibliotecas ActiveX, dando
 maior liberdade ao desenvolvedor. 
     O Visual Basic nao e' 100% orientado a objetos, mas sua base nessa area
 ja e' bastante extensa. Ele possui varios  objetos,  tanto  internos  a seu
 ambiente quanto de outras bibliotecas e aplicativos, e tambem  permite  que
 criemos nossos proprios objetos, recurso implantado na versao 4. A versao 5
 trouxe outro beneficio ao desenvolver: a criacao de controles ActiveX,  que
 podem ser utilizados em qualquer aplicativo que  suporte  esta  tecnologia,
 inclusive paginas da Web. 
     O objeto mais utilizado no VB e' o form. E'este objeto  que  usamos, na
 maioria das vezes, para criar a interface com o usuario. Um programa em  VB
 pode ter tanto um como varios objetos form; e, neste objeto, sao  inseridos
 os controles que serao utilizados, tais como botoes de comando,  caixas  de
 texto, etc. A criacao de um programa basico em VB,  tal  como  cadastro  de
 clientes, e' facil. Os  objetos  possuem  propriedades,  metodos  e eventos
 proprios. O VB trabalha  com  projetos,  que  nada  mais  sao  dos  que  os
 programas em sim seus forms, modulos e demais arquivos e objetos. 
     Na proxima edicao desse zine, veremos quais os tipos de  dados  com  os
 quais  o  VB  trabalha, o  que  sao  propriedades,  eventos  e  metodos   e
 comecaremos a montar nosso primeiro programa no qual, passo a passo,  serao
 mostrados os recursos dessa linguagem. 



CodersZine.



          < VISUAL BASIC COM WINSOCK >
                                                       by Hammett



     Hey programadores, iniciantes na area ou curiosos. Sou um novo membro e
 estarei enviando materias sobre  programacao  winsock  e  programacao  para
 acesso a dados SQL Server 6.5/Access.

     Nao sei se o  que  vou  mandar  esta  muito  facil  ou  muito  dificil,
 portanto, manifeste sua opniao. 8)
   
 Microsoft Winsock Control

     Antes de cair com a cara na API da winsock.dll, vamos primeiro utilizar
 o winsock control da microsoft porque sera de  mais  facil  manuseio,  alem
 disso, o winsock funciona muy bien com Proxy ou acesso direto, no  caso  da
 API, pra configura-la pra acessar o  proxy.....  cara.....  melhor  usar  o
 winsock control. 8)
     O winsock control  e'  uma  refinacao  dos  metodos  mais  usados  para
 utilizacao dos sockets do windows. Conta com o metodos e propriedades  mais
 usados como Accept, Connect, Send, RemoteHost.
     Para iniciarmos com essa pequena experiencia, vamos utilizar o controle
 para uma aplicacaozinha de check e-mail.

     Aqui esta o codigo do frmCheckEmail.frm, recorte e cole-o no  bloco  de
 notas e salve-o como frmCheckEmail.frm

 VERSION 5.00
 Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
 Begin VB.Form frmCheckEmail 
   BorderStyle     =   3  'Fixed Dialog
   Caption         =   "Check e-mail 1"
   ClientHeight    =   4245
   ClientLeft      =   3075
   ClientTop       =   1740
   ClientWidth     =   4155
   BeginProperty Font 
      Name            =   "Tahoma"
      Size            =   8.25
      Charset         =   0
      Weight          =   400
      Underline       =   0   'False
      Italic          =   0   'False
      Strikethrough   =   0   'False
   EndProperty
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   4245
   ScaleWidth      =   4155
   StartUpPosition =   2  'CenterScreen
   Begin MSWinsockLib.Winsock Winsock1 
      Left            =   120
      Top             =   3660
      _ExtentX        =   741
      _ExtentY        =   741
      _Version        =   327681
   End
   Begin VB.CommandButton Command2 
      Cancel          =   -1  'True
      Caption         =   "Sair"
      Height          =   435
      Left            =   2160
      TabIndex        =   10
      Top             =   3720
      Width           =   1215
   End
   Begin VB.CommandButton Command1 
      Caption         =   "&Aguardar"
      Height          =   435
      Left            =   780
      TabIndex        =   9
      Top             =   3720
      Width           =   1215
   End
   Begin VB.Frame Frame1 
      Caption         =   "Configuracoes:"
      Height          =   3435
      Left            =   120
      TabIndex        =   0
      Top             =   120
      Width           =   3915
      Begin VB.TextBox Text1 
         Height          =   315
         IMEMode         =   3  'DISABLE
         Left            =   360
         TabIndex        =   11
         Text            =   "pop.sao.nutecnet.com.br"
         Top             =   2220
         Width           =   3075
      End
      Begin VB.TextBox txtTempo 
         Height          =   315
         Left            =   2100
         MaxLength       =   2
         TabIndex        =   7
         Text            =   "05"
         Top             =   2940
         Width           =   375
      End
      Begin VB.Frame Frame2 
         Height          =   75
         Left            =   180
         TabIndex        =   5
         Top             =   2700
         Width           =   3555
      End
      Begin VB.TextBox txtPass 
         Height          =   315
         IMEMode         =   3  'DISABLE
         Left            =   360
         PasswordChar    =   "*"
         TabIndex        =   4
         Text            =   "naointeressa"
         Top             =   1440
         Width           =   3075
      End
      Begin VB.TextBox txtLogin 
         Height          =   315
         Left            =   360
         TabIndex        =   2
         Text            =   "hammettwhom"
         Top             =   660
         Width           =   3075
      End
      Begin VB.Label Label5 
         AutoSize        =   -1  'True
         BackStyle       =   0  'Transparent
         Caption         =   "Pop Server:"
         Height          =   195
         Left            =   240
         TabIndex        =   12
         Top             =   1980
         Width           =   855
      End
      Begin VB.Label Label4 
         AutoSize        =   -1  'True
         BackStyle       =   0  'Transparent
         Caption         =   "minutos."
         Height          =   195
         Left            =   2580
         TabIndex        =   8
         Top             =   3000
         Width           =   615
      End
      Begin VB.Label Label3 
         AutoSize        =   -1  'True
         Caption         =   "Verificar email a cada "
         Height          =   195
         Left            =   480
         TabIndex        =   6
         Top             =   3000
         Width           =   1560
      End
      Begin VB.Label Label2 
         AutoSize        =   -1  'True
         BackStyle       =   0  'Transparent
         Caption         =   "Password:"
         Height          =   195
         Left            =   240
         TabIndex        =   3
         Top             =   1200
         Width           =   750
      End
      Begin VB.Label Label1 
         AutoSize        =   -1  'True
         BackStyle       =   0  'Transparent
         Caption         =   "Username:"
         Height          =   195
         Left            =   240
         TabIndex        =   1
         Top             =   420
         Width           =   780
      End
   End
   Begin VB.Timer Timer1 
      Left            =   3600
      Top             =   3660
   End
 End
 Attribute VB_Name = "frmCheckEmail"
 Attribute VB_GlobalNameSpace = False
 Attribute VB_Creatable = False
 Attribute VB_PredeclaredId = True
 Attribute VB_Exposed = False
 Option Explicit
 
 ' Geralmente a porta do servidor POP e' 110, mas se um dia mudar, mude aqui
 Private Const PopPorta As Byte = 110

 Private Sub Command1_Click()
  
  Me.WindowState = vbMinimized
  Timer1.Enabled = True
  
 End Sub

 Private Sub Command2_Click()
  Unload Me
 End Sub

 Private Sub Verificar(sServer As String)
  On Error GoTo Manipular
  
  ' -------------------------
  ' Primeiro Passo: A CONEXAO
  ' -------------------------

  ' Inicia Winsock
  Winsock1.Close
  DoEvents
  
  Winsock1.Connect sServer, PopPorta
  DoEvents
  
 Problemas:
  Exit Sub
  
 Manipular:
  Select Case MsgBox("Ocorreu um erro inesperado." &
    vbNewLine & vbNewLine & Err.Number & vbNewLine & vbNewLine &
       Err.Description & vbNewLine & vbNewLine & "Deseja tentar novamente?",
          vbQuestion + vbAbortRetryIgnore, "Erro")
    Case vbAbort
      Resume Problemas
    Case vbRetry
      Resume
    Case vbIgnore
      Resume Next
  End Select
 End Sub

 Private Sub Timer1_Timer()
  
  Me.Caption = "Verificando mensagens..."
  Call Verificar(Text1.Text)
  
 End Sub

 Private Sub txtTempo_LostFocus()
  On Error Resume Next
  
  If Not IsNumeric(txtTempo.Text) Then
    MsgBox "Entre com um valor numerico.", vbInformation, "Erro"
    txtTempo.SetFocus
    Exit Sub
  End If
  
  ' 1 = 1000
  ' 60 = 60000
  
  Timer1.Interval = Val(txtTempo.Text) * 60000
  
 End Sub

 Private Sub Winsock1_Close()
  
  Me.Caption = "Check e-mail 1"

 End Sub

 Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  
  Dim sRetorno As String
  Dim iPos As Integer
  Static TotalMens As String
  Static BaixandoMsg As Integer
  Static sInco As String
  
  Winsock1.GetData sRetorno, vbString
  
  ' Esse pequeno truque e' para evitar perda da integridade
  ' das respostas do servidor devido ao delay  da  internet
   
  If Right(sRetorno, 2) <> vbNewLine Then
    sInco = sInco & sRetorno
    Exit Sub
  Else
    sRetorno = sInco & sRetorno
    sInco = ""
  End If
  
  Select Case UCase(Left(sRetorno, 3))
    Case "+OK"
      
  ' Se o server respondeu um +OK, entao tudo bem, analizemos o que mais  ELE
  ' disse, porem como nem  todos  respondem  igualmente,  vamos  buscar  por
  ' palavras chaves deles.
      
      If InStr(4, sRetorno, "starting", vbTextCompare) > 0 Then

        ' -----------------------------
        ' Segundo Passo: ENVIO DO LOGIN
        ' -----------------------------
               
        Winsock1.SendData "user " & txtLogin.Text & vbCrLf
        DoEvents
      ElseIf InStr(4, sRetorno, "password required", vbTextCompare) > 0 Then
        
        ' ---------------------------
        ' Terceiro Passo: A SENHA !!!
        ' ---------------------------
        
        Winsock1.SendData "pass " & txtPass.Text & vbCrLf
        DoEvents
      
   ElseIf InStr(4, sRetorno, txtLogin.Text & " has", vbTextCompare) > 0 Then
        
        ' -------------------------------
        ' FINALE:  Descarregue os headers
        ' -------------------------------
               
        iPos = InStr(4, sRetorno, "has", vbTextCompare)
        iPos = iPos + 4
        
        TotalMens = ""
        
        Do
          If Not IsNumeric(Mid(sRetorno, iPos, 1)) Then Exit Do
          TotalMens = TotalMens & Mid(sRetorno, iPos, 1)
          iPos = iPos + 1
        Loop
        
        If Val(TotalMens) = 0 Then
          Winsock1.Close
          Me.Caption = "Check e-mail 1"
          DoEvents
          Exit Sub
        Else
          BaixandoMsg = 1
          Me.Caption = "Baixando cabealho " & BaixandoMsg
          Winsock1.SendData "Top " & BaixandoMsg & " 15" & vbCrLf
          DoEvents
        End If
      
      End If
      
    Case "FRO"
      
      Load frmNews
      
      frmNews.Text1.Text = sRetorno
      frmNews.Parsing
      BaixandoMsg = BaixandoMsg + 1
      
      If BaixandoMsg > Val(TotalMens) Then
        Winsock1.Close
        DoEvents
        frmNews.Show
        Me.Caption = "Check e-mail 1"
        Exit Sub
      Else
        Me.Caption = "Baixando cabealho " & BaixandoMsg
        Winsock1.SendData "Top " & BaixandoMsg & " 15" & vbCrLf
        DoEvents
      End If
      
      Me.Enabled = False
      
    Case Else
        
        '
        ' Se nao respondeu +OK e' que algo esta errado
        '
        '
       Me.Caption = "Check e-mail 1"
       MsgBox "Resposta do servidor " & vbNewLine & vbNewLine & sRetorno &
        vbNewLine & vbNewLine & "Operacao Cancelada.", vbInformation, "Erro"
       Winsock1.Close
       DoEvents
       Exit Sub
        
  End Select
  
 End Sub



     Aqui esta o codigo do frmNews.frm, recorte e cole-o no bloco de notas e
 salve-o como frmNews.frm



 VERSION 5.00
 Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.2#0"; "COMCTL32.OCX"
 Begin VB.Form frmNews 
   AutoRedraw      =   -1  'True
   BorderStyle     =   3  'Fixed Dialog
   Caption         =   "Check Email Funciona !!!"
   ClientHeight    =   3435
   ClientLeft      =   1935
   ClientTop       =   1530
   ClientWidth     =   6705
   BeginProperty Font 
      Name            =   "Tahoma"
      Size            =   8.25
      Charset         =   0
      Weight          =   400
      Underline       =   0   'False
      Italic          =   0   'False
      Strikethrough   =   0   'False
   EndProperty
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3435
   ScaleWidth      =   6705
   StartUpPosition =   2  'CenterScreen
   Begin VB.TextBox Text1 
      Height          =   2475
      Left            =   120
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   3
      Top             =   3480
      Width           =   6435
   End
   Begin VB.CommandButton Command1 
      Caption         =   "OK"
      Default         =   -1  'True
      Height          =   435
      Left            =   2640
      TabIndex        =   2
      Top             =   2940
      Width           =   1335
   End
   Begin ComctlLib.ListView ListView1 
      Height          =   2475
      Left            =   120
      TabIndex        =   0
      Top             =   360
      Width           =   6435
      _ExtentX        =   11351
      _ExtentY        =   4366
      View            =   3
      LabelWrap       =   -1  'True
      HideSelection   =   0   'False
      _Version        =   327682
      ForeColor       =   -2147483640
      BackColor       =   -2147483643
      BorderStyle     =   1
      Appearance      =   1
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "Tahoma"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      NumItems        =   2
      BeginProperty ColumnHeader(1) {0713E8C7-850A-101B-AFC0-4210102A8DA7} 
         Key             =   ""
         Object.Tag             =   ""
         Text            =   "De:"
         Object.Width           =   3882
      EndProperty
      BeginProperty ColumnHeader(2) {0713E8C7-850A-101B-AFC0-4210102A8DA7} 
         SubItemIndex    =   1
         Key             =   ""
         Object.Tag             =   ""
         Text            =   "Assunto:"
         Object.Width           =   6174
      EndProperty
   End
   Begin VB.Label Label1 
      AutoSize        =   -1  'True
      Caption         =   "Mensagens:"
      Height          =   195
      Left            =   120
      TabIndex        =   1
      Top             =   120
      Width           =   870
   End
 End
 Attribute VB_Name = "frmNews"
 Attribute VB_GlobalNameSpace = False
 Attribute VB_Creatable = False
 Attribute VB_PredeclaredId = True
 Attribute VB_Exposed = False
 Option Explicit
 
 Private Sub Command1_Click()
  Unload Me
 End Sub

 Private Sub Form_Load()
  ListView1.ListItems.Clear
 End Sub

 Private Sub Form_Unload(Cancel As Integer)
  frmCheckEmail.Enabled = True
 End Sub

 Public Sub Parsing()
  On Error Resume Next
  Dim iIni As Integer, iFim As Integer
  Dim lista As ListItem
  Dim strString As String
  
  iIni = InStr(1, Text1.Text, "From:", vbTextCompare)
  iFim = InStr(iIni + 1, Text1.Text, Chr(13), vbTextCompare)
  
  If iIni > 0 Then
    
    Set lista = ListView1.ListItems.Add(, , Mid(Text1.Text, iIni + 6, iFim -
        (iIni + 7)))
    
    iIni = InStr(1, Text1.Text, "Subject:", vbTextCompare)
    iFim = InStr(iIni + 1, Text1.Text, Chr(13), vbTextCompare)
    
    lista.SubItems(1) = Mid(Text1.Text, iIni + 8, iFim - (iIni + 8))
    
  End If
  
  Text1.Text = ""
  
 End Sub

     Crie um novo projeto, adicione o controle Winsock e o Common Controls.
 Adicione estes dois formularios.

     O programa e' simples, apenas conecta no servidor pop, loga-se com  seu
 username e password, verifica se ha mensagens. Se sim, puxa os headers, faz
 um parsing para pegar o nome de quem mandou e o assunto.

     Qualquer duvida, estarei respondendo na proxima edicao.

 []'s !!!

 Hammett
 hammett@thepentagon.com
 http://www.geocities.com/Hollywood/Set/2008/activemenu.html
 UIN 1223824


CodersZine.





                  <  DELPHI  >
                                                    by Progman 


  Ai galera !!!!!
  1. Aprendendo
  2. Dicas

     1 - Aprendendo...

 == Para ler esta Secao... ==

      Fiz esta secao nao pensando exclusivamente em pessoas que  conhecem  o
 delphi,   mas  em  pessoas  que  estejam  interessadas  em  programar  esta
 maravilhosa  linguagem  da  Borland. Nao  nego  que  um  pequena  nocao  em
 programacao ira ajudar muito a entender o que eu coloquei  aqui. O  exemplo
 e' uma boa forma de aprender sobre um comando, por isso a cada exemplo  voce
 encontrara informacoes sobre cada comando do mesmo.

 == Comecando... == 

  == PARTE I - Introducao a linguagem ==

 == Variaveis ==

     Talvez   programadores  oriundos  de  outras  linguagens  tenham  certa
 dificuldade para se  acostumar  com  os  padroes  delphi. A  declaracao  de
 variaveis e seu uso, provavelmente parecera chato para programadores Visual
 Basic. Vamos a algumas regras praticas:

     1.Nao e'possivel declarar variaveis em qualquer lugar, apenas no inicio
 do procedimento. 
     2.Os tipos de dados Delphi  nao  sao  compativeis  (como  no  VB),  por
 exemplo, voce nao pode multiplicar a string "X" pela string  "Y",  mas  sim
 transforma-las em numeros inteiros e depois multiplica-los, veja:
     Z := StrToInt(X) * StrToInt(Y);.

     Nem mesmo numeros inteiros sao compativeis com reais.

 == Sinal de igual ==

     Nao use o sinal de igual para atribuir valores(como em grande parte das 
 linguagens) mas sim ":=" como na linha abaixo:

     i := 0;

     O sinal de igual e' usado apenas para comparacao como em comandos "If",
 veja:

     If i = 0 then
     ShowMessage('O valor de i e' 0');
     else
     ShowMessage('O valor de i nao e' 0';

     Note que nao se  usa  o  EndIf  como  no  caso  do  Visual  Basic,  por
 exemplo... Mas pode-se usar o begin e end para determinar o inicio e o  fim
 como em:

  if i = 0 then
  begin
   ShowMessage('O valor de i e' 0');
   ShowMessage('Foi usado Begin e End porque foram utilizadas duas linhas');
  end
  else
    ShowMessage('O valor de i nao e' 0');

     Quando se usa uma unica linha nao ha necessidade de usar Begin e End.

 - IMPORTANTE -
     Voce deve ter notado que em Delphi nao se usam  aspas  duplas ("),  mas 
 aspas simples ('), ou apostrofo, como preferir. Tambem  e'  usado  ponto  e 
 virgula (;) no final de cada comando (mas nao nos que terminam com comandos
 como If. Mas lembre-se que NaO se deve usar ponto e virgula antes de else.

     Outro motivo pelo qual no final de cada declaracao  usa-se  o  ponto  e
 virgula e' para mostrar que acabou.  Por esta  razao  pode-se  continuar  o
 comando na linha de baixo (menos partir strings ao meio), veja:

     Estaria CORRETO:
     MessageDlg ('Esta e' uma mensagem!',
          mtinformation, [mbok], 0);

     Mas estaria INCORRETO:
     MessageDlg ('Esta e' uma
         mensagem!', mtinformation, [mbok], 0);

     Se for necessario use:
     MessageDlg ('Esta e' uma' +
         + ' mensagem!', mtinformation, [mbok], 0);
     Isso e' correto.

 == Comentarios ==

   Os comentarios podem estar entre chaves:
   {Este e' um comentario que pode estar
      em mais de uma linha};

   entre sinais de parenteses e asterisco, como o mostrado abaixo:
 (* este e' um comentario
 que pode estar em mais de uma linha
 ate que seja colocado o sinal de asterisco e fecha parenteses *)

 Ou pode estar depois de duas barras, para comentarios rapidos de apenas uma
 linha, veja:
 // Este comentario nao pode passar de uma linha...

 == Operadores ==

 Eles sao:
  *  - Multiplicacao aritmetica.
  /  - Divisao de numeros que obtem um numero real (exemplo: 5/2 = 2.5).
 div - Divisao de numeros que obtem um numero inteiro (exemplo: 5/2 = 2).
  +  - Adicao.
  -  - Subtracao.
  =  - Igual.
  <> - Diferente.
  >  - Maior.
  >= - Maior ou igual.
  <  - Menor.
  <= - Menor ou igual.

  Exemplo:

  Form1.Canvas.TextOut (1, 1, IntToStr((2 * 5) div 3));

 Form1: Nome do formulario;
 Canvas: Propriedade (nao apenas do  formulario)  relacionada  com  desenho. 
 Neste caso ela e' usada para escrever no formulario (com o  TextOut),  algo 
 como o print do Visual Basic. Sua cor de fundo padrao  e'  branca,  mas  e' 
 possivel muda-la acessando a propriedade brush. O primeiro parametro  e'  o 
 left, o segundo e' o top e o terceiro e' o texto a ser escrito.
 IntToStr :  Transforma  um  inteiro  em  caracteres  ( como  ja  foi   dito 
 anteriormente,  o  Delphi  nao  possui  compatibilidade  entre  Integers  e
 Strings, a nao ser que sejam usadas Variants).

 Iniciantes:
     Para quem ainda nao esta integrado  com  programacao  aqui  vao  alguns 
 conceitos:
 Parametros: Sao "valores extras", colocados entre parenteses para  fornecer 
 outras  informacoes  ao  metodo  ( function  ou  procedure ).  No   exemplo 
 mostrado, a funcao precisa dos parametros inteiros (que  foram  determinado 
 como 1 neste caso) para saber a que distancia da margem esquerda e o  topo, 
 respectivamente;
 Left: Valor inteiro que diz a distancia ate o canto esquerdo de um objeto;
 Top: Valor inteiro que diz a distancia ate o topo de um objeto;


  2 - Dicas...

 2.1. Usando funcoes externas (de DLLs)...
     Usar funcoes externas, de uma ou mais  DLLs  e'  muito  simples,  basta
 declara-las da seguinte forma:

 function NomeDaFuncao(Parametros: Tipo): TipoRetorno; stdcall; external 
 'NomeDaDLL';

 Voce pode ver o nome de  uma  funcao  da  DLL  na  Visualizacao  Rapida  do 
 Windows (se esta estiver sido instalada), para isso encontre o arquivo DLL, 
 clique nele com o botao direito do mouse e escolha visualizacao rapida.

 2.2. Manipulando "Application"...
 A classe TApplication proporciona muitas manipulacoes uteis  do  aplicativo 
 como um todo. Por exemplo, caso voce queira que quando  um  aplicativo  for 
 minimizado apareca a hora atual no titulo da barra de tarefas, e quando ele 
 for restaurado nao apareca, use o  seguinte  codigo  no  evento  OnLoad  do 
 formulario, por exemplo: 
 
 Application.OnMinimize := ShowDate;
 Application.OnRestore := NShowDate;
 
 procedure ShowDate;
 begin
 TForm1.Timer1Timer(Sender);
 Timer1.Enabled := True;
 end;
 
 procedure NShowDate;
 begin
 Timer1.Enabled := False;
 Application.Title := 'Titulo do Aplicativo';
 end;
 
 Este exemplo considera que o aplicativo possua um relogio que  atualiza  de 
 tempos em tempos (a cada 250 milesimos de segundo  por  exemplo).  Este  e' 
 desabilitado quando o formulario e' restaurado.
 
 2.3. Undo na caixa de texto (Memo)...
 Use o seguinte codigo para Desfazer a ultima acao em  uma  caixa  de  Texto 
 (Memo):
 
 Memo1.Perform(EM_UNDO, 0, 0);
 
 
 o valor retornado de Memo1.Perform(EM_CANUNDO, 0, 0) sera diferente de zero
 se o comando de Desfazer estiver disponivel.

 2.4. Pegando a posicao do cursor...
 Use o seguinte codigo para ver a posicao do cursor na  tela,  ele  e' muito
 util quando o evento usado nao possui como parametros "X" e "Y":
 
 procedure GetPosition (var X; var Y);
 var CPos: TPoint;
 begin
 GetCursorPos(CPos);
 X := CPos.X;
 Y := CPos.Y;
 end;
 
 Espero que este guia pratico tenha lhe servido para alguma coisa! :)))


 
CodersZine.




               < DELPHI COM ACTIVEX > 
                                                           by BADGod


     Nova tecnologia produzida pela Microsoft que esta no Delphi97. Vai  ser
 muito facil para o  desenvolvimento de aplicativos clientes pequenas e  sem
 necessidade  de  configura-lo  para  ambiente  distribuido  web com ou  sem
 arquitetura de banco de dados Cliente/Servidor multicamadas.
     Um nome bem recente na area desenvolvimento para  INTERNET  o  ActiveX,
 visa  empacotar  as  principais  tecnologias  de  reutilizando  de  funcoes
 programadas e prestacao de servico em aplicativos OLE* e COM*.
     Apos examinar toda a tecnologia de controle OLE*, a Microsoft descobriu
 um "poco de petroleo".
     O OLE* tinha  crescido  assustadoramente,  e  consigo  adquiriu  tantas
 informacoes e caracteristicas de interface  que  os  componentes  OLE*  nao
 poderiam navegar com rapidez por uma  tipica  conneccao  a  Internet. Vamos
 debulhar isso mais um pouco, no control e OLE* e' preciso carregar  consigo
 mesmo informacoes que definem uma janela na tela, mesmo que  esse  controle
 jamais seja visivel.
      Assim a Microsoft planejou e construiu uma tecnologia mais adaptavel a
 situacao e muito mais agil. Vindo do mesmo Kernel do COM*, com o OLE*,  mas
 com um conjunto menor de exigencias centrais e novas  opcoes  para  que  se
 possa contruir refinadas e dinamicas Home Pages.
     Todos os controles criados apartir do COM* e do OLE* foram chamados  de
 Controles Activex.
     Agora isso quer dizer que  toda  a  industria  de  controles  Controles
 Activex/OCX estam automaticamente disponiveis para a Internet tambem o  que
 promete facilitar muito a nossa vida.  Do  mesmo  jeito  que  um  Controles
 Activex/OCX sao usados num programa, ele podera ser usado numa pagina  HTML
 atraves como um applet na linguagem JAVA, ou  dentro  de  um  programa.  De
 acordo com a sua aplicacao, esses controles vao poder ser usados por leigos
 ou por programadores. Ex.: Tem uma possibilidade de existir um controle que
 o usuario sa precise escrever uma frase para ela ficar pulando  pela  tela,
 enquanto outro que trate com banco de dados precise de programacao.
     Esses arquivos serao executados junto com a  pagina  que  os  contem  e
 colocados num cache permanente no computador do  usuario,  o  que  fara  da
 navegacao um processo mais rapido, sera notificado instalacao na maquina.
 Devido a questao  da  seguranca,  existe  um  tipo  de  diploma  dado  pela
 Microsoft ou por uma representante sua que certifica que este controle  nao
 pode causar danos ao usuario, se o controle que estiver sendo executado nao
 possui-lo, a pessoa sera perguntada se deseja executa-lo ou nao.
     Agora, e principalmente na nova versao (3.0 ou 97), o  Delphi  usara  a
 tecnologia ActiveX para criacao de aplicacoes Servidoras Web  e  aplicacoes
 Clientes Web.
     A tecnologia ActiveX tem tudo para dar certo, so depende  da  Microsoft
 cooperar.

 Duvidas: 
 COM:
        Essa nova tecnologia dos Sistemas  Operacionais  32  Bits  Microsoft
 estara implementada no Delphi97. Tera muita  utilidade  no  desenvolvimento
 cliente/servidor multiplas camadas
           
 OLE:
        A tecnologia OLE e' usada para a criacao de controles OCX, que  pode
 ser 32 bits. Devido a  um imenso apoio da Microsoft as empresas deste ramo,
 logo todas elas atualizaram seus produtos para a nova tecnologia,  hoje  os
 VBX estao ficando mais que desaparecendo, enquanto o OCX cresce a cada dia.
 A tecnologia OLE e' componente central dos  sistemas  operacionais  Windows
 (da Microsot) do seu grupo de aplicativos, tais como Microsoft  Office  que
 monopolisa todo o mercado. (Na minha opiniao a Microsoft domina  o  mercado
 apenas por falta de conhecimento da maioria da populacao,  pois  alguns  de
 seus programas sao de  pessima  qualidade  mais  no  entanto  sao  os  mais
 usados).


CodersZine.



                    <  JAVA  >                        
                                                    by Jac{Delpher}


     Olah, aqui vai eu novamente escrever  sobre  JAVA  e  JAVASCRIPT.  Bom,
 espero q vcs jah tenham lido minha materia sobre Algoritmos, jah  que  isso
 e' requerido p/ qualquer linguagem. Bom, mas aqui so  vai  uma  introducao,
 por enquanto, nada de codigo. Codigo so na proxima edicao.

     Bom, por incrivel que  pareca,  JAVA  e  JAVASCRIPT  naum  tem  nenhuma
 relatividade(ao menos comercialmente). JAVA e'uma linguagem de programacao,
 JAVASCRIPT, tbm, se levarmos o conceito de que uma linguagem de programacao
 e' aquela que suporta variaveis e tudo mais, JAVASCRIPT e'  uma  linguagem.
 Mas, comercialmente falando, JAVA foi criada pela  SUN  e  JAVASCRIPT  pela
 NETSCAPE. A BUGSOFT naum criou nada referido a  JAVA,  so  depois  que  viu
 que essa linguagem ele naum ia conseguir derrubar.  E  outra  coisa,  essas
 duas linguagens vao ser em materias diferentes, mas como e' introducao...

     Entao, vamos as definicoes. JAVASCRIPT, naum deixa de ser uma linguagem
 de programacao, mas ela constroi programas que rodem STAND ALONE, ou  seja,
 vc naum pode criar um programa em JAVASCRIPT e  chegar  no  prompt  do  DOS
 digitar: MEU_PRIMEIRO_PROGRAMA_JAVASCRIPT. O JAVASCRIPT e'  embutido  entre
 TAGS em uma Home Page, ou seja, vc poe o codigo entre  <SCRIPT>  </SCRIPT>.
 O  JAVASCRIPT e' uma linguagem  exepcional, uma  vez  que  a  linguagem  de
 HyperTexto (HTML) naum tem capacidade de dar muita beleza a uma Home  Page.
 Entao a NETSCAPE criou essa linguagem c/ a intencao de justamente capacitar
 a Home Page  de  se  ter  animacoes,  etc.  A  linguagem  JAVASCRIPT  estah
 intimamente ligada ao HTML. O JAVASCRIPT naum funciona sem o HTML, ok?

     Agora ,  tecnicamente  falando,  o  JAVA  e  o  JAVASCRIPT  tem  muitas
 semelhancas. O estilo de codificacao e' um pouco semelhante, mas o JAVA  e'
 super-parecido c/ o C++, jah o JAVASCRIPT e' uma mistura de PASCAL c/  C++.
 Ah e  esqueci, ambas sao Orientadas a Objeto, entao eu  tbm  aconselho  que
 vcs leiam sobre isso. E um livro classico (embora antigo) e' o MODELAGEM  E
 PROJETOS BASEADOS em OBJETOS -- CAMPUS (www.campus.com.br).

     Entao  vamos  ao  JAVA.  Essa  e'  a  grande  revolucao  pessoal.  Essa
 linguaugem e' tao  exepcional  que  eu  naum  tenho  muitas  palavras  para
 descreve-la. Imagine vc poder fazer um grande trabalho, e poder executar em
 qualquer computador, sem ter restricoes de Sistema Operacional,etc. Isso e'
 espetacular. Ah, isso tbm e' valido para o  JAVASCRIPT  (multi-plataforma).
 E' isso pessoal, e' o JAVA, a linguagem do sculo  XXI.  Essa  e'  a  unica
 linguagem que naum tem dependencia de WIndows, Mac, Dos, Unix, o q  for.  A
 linguagem estah tao forte que nem o BILL GAY tah conseguindo derrubar.  Ele
 tah puto da vida e tah se aliando ao JAVA. Daqui a uns 6 ou 10 anos, vcs so
 vao ouvir falar em JAVA. As demais linguagens, como o Pascal, C, Assembly e
 outras, vao tudo sair do GIBI, uma  vez  que  com  o  JAVA  tudo  estah  ao
 alcance. Simplificando, o JAVA vai  ser  o  Assembly  do  Sculo  XXI.  Vao
 existir CHIPS com JAVA, tudo, mas tudo mesmo JAVA. Acho q ate o nome do meu
 filho vai ser JAVANES :)).

     Vamos falar  um  pouco  mais  do  funcionamento  da  linguagem.  Alguns
 programadores estao recusando o JAVA por causa da lentidao,  principalmente
 os que fazem aplicativos comerciais. o meu  amigo  TICO  me  disse  um  dia
 desses ai que fez uma aplicacao comercial em JAVA e ficou a maior lentidao.
 E', mas percebam que a linguagem estah no comeco, e logicamente que  a  SUN
 vai investir toda a sua grana para  deixar  JAVA  mais  rapido  ate  que  o
 Assembly! :)). Pode ter certeza.

     Na Computacao vc naum pode gostar de nada. Vc tem que ser malandro. Tem
 que se adaptar de acordo com o que estah no  momento.  Se  ficar  nessa  de
 "naum  e' pq eu gosto dessa linguagem e naum vou  abandonar..."  ai  vc  se
 estrumbica. Naum tem essa de se apaixonar, tem que se  adapatar  de  acordo
 com o mercado. O DOS e' passado a muito  tempo,  mas  existe  ainda  tantos
 desenvolvedores p/ essa plataforma. Tudo bem, mas no futuro  eles  vao  ter
 que tratar o desenvolvimento p/ DOS como "Masturbacao Intelectual".  Admiro
 muito os meus amigos hC e Mingo, grande programadores DOS, que fazem lindas
 DEMOS, mas eles tbm vao ter que estudar um JAVA de leve, se  nao  pode  ate
 ficar p/ tras. Mas acho que isso vai demorar,  pq  artistas  na  computacao
 estah dificil. E, para mim, a  parte  mais  fascinanate  da  computacao  e'
 justamente a mistura de computacao com arte. Isso e' legal, mas espero  que
 eles facam uma DEMO em JAVA, so p/ esperimentar. Deve sair legal.

     Mas voltando ao assunto, vamos falar um pouco de como o JAVA  funciona.
 O processo e' o seguinte (seria melhor descrever como uma figura, mas...).


 COMPILADOR JAVA ---> BYTECODES JAVA (o mesmo p/ todas plataformas) --->
 INTERPRETADOR JAVA (um para cada sistema diferente) (WINDOWS, MAC, UNIX...)

 Chega de LOTUS 1 2 3 p/ DOS, WINDOWS 3.11, WINDOWS 95! E o bom e'que quando
 se recompila o sistema, em uma  determinada  plataforma,  naum  se  precisa
 mudar uma linha de codigo, e' so recompilar e pronto. Isso poupa um  bocado
 do saco do programador, pode crer!

 Por essa edicao e' so!

 Qualquer duvida, critica ou sugestao.. ----> javanes@thepentagon.com

 by Jac{Delpher} from #CODERS to CODERS!

 "So ALEGRIA O RESTO  MONOTONIA!" --> adapatado por KDosKD e eu! :))



CodersZine.



                 <  GRAFICOS  >                        
                                                       by KDoskD
 Hi ALL
 
 Introducao:

     Comecamos com esse texto uma secao que trata de programacao grafica  ou
 seja, a  parte  grafica  de  um  programa.  Como  os  graficos  sao  partes
 importantes de um  programa  tentaremos  abordar  esse  assunto  da  melhor
 maneira possivel, tentando demostrar todos os modos possiveis de  se  fazer
 um grafico.

 Parte I : Definicoes

     Bem, vamos comecar dizendo ou definindo o que eh um ponto.  Um ponto eh
 uma marca no espaco ( Um ponto eh um ponto...). Um conjunto  de  pontos  eh
 uma reta. E finalmente um poligono eh um  conjunto  de  retas.  Uma  imagem
 tambem eh um conjunto de elementos que podem ser um ponto, uma reta  ou  um
 poligono.  Outra definicao para  imagem  ou  graficos  eh  a  representacao
 atravez de imagens alguma coisa, por exemplo, um botao, uma janela,  etc...
 Os graficos no computador sao formados  por  pixels ( Pequenos  pontos  que
 existem na tela, que no caso, eh o monitor), sendo  assim,  se  decompormos
 uma imagem de computador, a menor parte que conseguiriamos seria um  pixel.
 Assim como as figuras sao formadas por pixels,  os  caracteres  tambem  sao
 formados por pixels, so que no caso de caracteres, a tela  e'  dividida  em
 quadrados (80 colunas por 43 linhas, no caso do DOS),  onde  cada  caracter
 ocupa um quadrado na tela, e como os graficos,  os  caracteres  tambem  sao
 formados por pontos. Bom, acho que para a primeira parte ja basta.

     Aguarde ate a  Parte II onde comecamos a entrar na programacao.



CodersZine.



                <  GRAFICOS EM 3D >                        
                                                             by hC

 . Introducao

     Heya  povo...  Eu  sou  o  mestre  da  preguica  para  escrever,  entao
 preparem-se para muito codigo e pouco texto :)
     Eu escrevi isso aqui ha umas semanas, a  pedido  do  xROD,  que  estava
 precisando de um toque sobre como fazer rotacoes de poligonos. O codigo  eh
 ANSI-C puro, poden do ser facilmente portado para qualquer compilador.
     Eu  testei  no  Watcom  C/C++  10.6 ,  no  Borland  C/C++  3.1   e   no
 DJGPP v2.alguma_coisa :)
   
   OBS: Estou partindo do principio de que voce que  esta  lendo  isso  aqui
 compreende o basico da linguagem C e possui nocoes de  programacao  para  o
 modo VGA 320x200 (13h).

 . Teoria Matematica

     Eu sei que  muitos  coders  odeiam  matematica,  especialmente  algebra
 linear e geometria analitica. Mas  ambas  sao  necessarias  para  se  fazer
 graficos 3D de alguma precisao. 
     Neste artigo eu vou  apenas  explicar  a  utilizacao  das  formulas  de
 rotacao de  vertices no espaco 3D e nao sua origem matematica.
     Talvez nos proximos artigo, seja necessaria a explicacao matematica das
 formulas, mas por enquanto voce pode ir se contentando em apenas decora-las
 (acredite, eu fiz isso por muito tempo, antes de  ter  aulas  de  geometria
 analitica e nunca me dei mal. :))

 . O Ponto no Espaco 3D

     No espaco, a menor unidade seria um ponto. Aqui associaremos um ponto a
 um vertice, apenas para facilitar. Por exemplo, um cubo possui 8  vertices,
 entao para desenha-lo precisaremos de 8 pontos.

  typedef struct {
   float x,y,z;
   int color;
  } Vertex;

     Com o codigo acima eu defini a estrutura Vertex, que possui armazena as
 informacoes x, y e z (coordenadas do ponto no espaco) e  a  sua  respectiva
 cor.
     O proximo passo seria definir um objeto utilizando essas informacoes.
 Vamos usar um cubo aqui...

  Vertex Cubo[8] = { -20, -20, -20, 15, // vertices: coordenadas x,y,z e cor
                     -20,  20, -20, 15,
                      20,  20, -20, 15,
                      20, -20, -20, 15,

                     -20, -20,  20, 15,
                     -20,  20,  20, 15,
                      20,  20,  20, 15,
                      20, -20,  20, 15 };

     O que eu fiz foi definir as coordenadas  de  cada  vertice  no  espaco,
 partindo do principio de que o cubo  possui  dimensao  40,  ou  seja,  cada
 vertice esta 20 unidades distante do seu centro, seja qual for a direcao. 

 . A Rotacao em si

   Agora que o objeto esta definido, vira a parte  principal  deste  artigo:
   Rotacionar os vertices  do  cubo.  O  que  voce  precisa  entender  antes
 de mais nada, e que a estrutura  Cubo  nao  pode  ser  alterada.  Voce  vai
 rotaciona-la mas  guardar o resultado em outras variaveis.
   Bem, vamos la... A rotacao e realizada em  3  etapas.  Voce  rotaciona  o
 vertica em cada plano de acordo com o angulo. Como seria isso:

   [ Rotacao no eixo Z ]

   Novo X = X  Original * cosseno do angulo - Y Original * seno do angulo
   Novo Y = X  Original * seno do angulo + Y Original * cosseno do angulo
   Novo Z = Z Original

   [ Rotacao no eixo Y ]

   Novo X = X Original * cosseno do angulo + Z Original * seno do angulo
   Novo Y = Y Original
   Novo Z = -X Original * seno do angulo + Z Original * cosseno do angulo

   [ Rotacao no eixo X ]
   
   Novo X = X Original
   Novo Y = Y Original * cosseno do angulo - Z Original * seno do angulo
   Novo Z = Y Original * seno do angulo + Z Original * cosseno do angulo

   Voce deve ter estar se perguntando o porque de nao se rotacionar tambem a
 coordenada Z quando se realiza a rotacao no eixo Z e o mesmo com as  demais
 coordenadas. Isso eh feito dessa forma porque estamos rotacionado as demais
 coordenadas em relacao ao eixo em questao. Nao ha logica  em  rotacionar  o
 proprio eixo em relacao a ele mesmo :)
   Bem, com essas formulas voce ja deve estar imaginando como seria o codigo
 em si que utilizaria elas. Fique sabendo que nao e nem um pouco complicado.
 apenas aplicacao direta  dessas  formulas  utilizando  funcoes  do  proprio
 compilador C, como a sin(); para a funcao  seno  e  cos();  para  a  funcao
 cosseno.
   A ultima coisa que eu gostaria de colocar eh que eu  vou  realizar  as  3
 rotacoes em sequencia no codigo  exemplo  e  por  isso  eu  defini  algumas
 variaveis temporarias para armazenar os valores resultado das equacoes.
    
   [ Variaveis ]

   - old_x, old_y e old_z : armazenam os valores originais do objeto
   - new_x e new_y : armazenam os valores resultado da rotacao em Z
   - tmp_x e tmp_z : armazenam os valores resultado da rotacao em Y
   - swp_y e swp_z : armazenam os valores resultado da rotacao em X

 . Perspectiva, Camera FOV e etc

   A ultima coisa que vou mencionar aqui  e' a  adicao  de  perspectiva  aos
 poligonos. Isso eh bastante simples mas eh muito importante  na  beleza  do
 produto final.
   As formulas sao simples e so se aplicam as coordenadas X e Y do pologono,
 pois sao as unicas que podem ser representadas na tela.

   X Final = X * FOV da Camera / Z + FOV da camera + deslocamento X
   Y Final = Y * FOV da Camera / Z + FOV da camera + deslocamento Y

   As variaveis 'deslocamento X' e 'deslocamento Y' sao a posicao do  objeto
 na tela, enquanto 'FOV da Camera' eh o aspecto da perspectiva.  Eu  costumo
 utilizar o  valor  256  para  ele,  mas  voce  vai  descobrir  muita  coisa
 interessante com os multiplos de 16 :)... Experimente 128, 64, 512, etc...

 . O Programa Exemplo

   O programina eh este aqui. A unica observacao que eu faco e'que voce deve
 mudar o protitipo malloc.h para alloc.h se voce  utiliza  o  Borland C.  No
 DJGPP e no Watcom o nome da biblioteca e' malloc.h mesmo.
    De resto, voce deve mudar a rotina para setar o video de  acordo  com  o
 seu  compilador  (WCC_SetMode  para  Watcom,  BCC_SetMode  para  Borland  e
 GCC_SetMode para DJGPP).
 
 /*-------------------------------[ cut here ]------------------------------

         3Dtest.c by Hugo Cristo para CodersZine. Magazine 01

 -------------------------------------------------------------------------*/

 #include <dos.h>
 #include <conio.h>
 #include <malloc.h>
 #include <stdio.h>
 #include <math.h>
 
 //ponteiro para o video
 char *VIDMEM = (char *)0xA0000;
 //buffer virtual
 char *vis;
 /* ===================================================================== */
 /*  Estrutura 3D e Poligono                                              */
 /* ===================================================================== */
                                                              
  typedef struct {
   float x,y,z;
   int color;
  } Vertex;

  Vertex Cube[8] = { -20, -20, -20, 15, // vertices: coordenadas x,y,z e cor
                     -20,  20, -20, 15,
                      20,  20, -20, 15,
                      20, -20, -20, 15,

                     -20, -20,  20, 15, 
                     -20,  20,  20, 15,
                      20,  20,  20, 15,
                      20, -20,  20, 15 };


 /* ===================================================================== */
 /*  Funcoes de video                                                     */
 /* ===================================================================== */

 // espera retraco de video
 void wait_vertical(void)
 {
              while(inp(0x3DA) & 8);
              while((inp(0x3DA) & 8) == 0);
 }


 // seta modo de video para WATCOM C/C++
 void WCC_SetMode(short mode);
 #pragma aux WCC_SetMode = \
         "int     10h"      \
 parm [ax];

 //seta modo de video para DJGPP C/C++ (deve funcionar com o BC4.0)
 void GCC_SetMode(int mode) {
    union REGS in;          
    in.x.ax=mode;
    int86(0x10,&in,&in);    
 }
 
 // seta modo de video para Borland C/C++ 
 void BCC_SetMODE(int mode) {
     asm mov ax,mode
     asm int 0x10
 }
 
 /* ===================================================================== */
 /*  Coloca Ponto na tela                                                 */
 /* ===================================================================== */

 void PutPixel(int x, int y, char cor, char *dest) {
 dest[x+(y<<6)+(y<<8)] = cor;
 }

 /* ===================================================================== */
 /*  Funcao Main                                                          */
 /* ===================================================================== */

 void main(void)
 {
 // temp
 float old_x, old_y, old_z;
 float new_x, new_y, // rotacao em Z
       tmp_x, tmp_z, // rotacao em Y
       swp_y, swp_z, // rotacao em X
       fin_x, fin_y; // coordenadas finais dos vertices apos perspectiva
 
 float s_x, s_y;   // screenx e screeny
 float ang = 0;
 int i;
 
 //aloca off-screen buffer
 vis = (char *) malloc(64000);
 
 // seta modo 0x13 = VGA 320x200x256 cores
 WCC_SetMode(0x13);
 
 // seta deslocamento para centro do video
 s_x = 160;
 s_y = 100;
 
 while (!kbhit()) {
  // limpa off-screen buffer
  memset(vis, 0, 64000);
   //rotaciona vertices
   for (i = 0; i < 8; i++) {
     old_x = Cube[i].x;
     old_y = Cube[i].y;
     old_z = Cube[i].z;
     // rotaciona em Z
     new_x = old_x*cos(ang)-old_y*sin(ang);
     new_y = old_x*sin(ang)+old_y*cos(ang);
     // rotaciona em Y
     tmp_x = new_x*cos(ang)+old_z*sin(ang);
     tmp_z = -new_x*sin(ang)+old_z*cos(ang);
     // rotaciona em X
     swp_y = new_y*cos(ang)-tmp_z*sin(ang);
     swp_z = new_y*sin(ang)+tmp_z*cos(ang);
     // equacao de perspectiva
     // x_screen = FOV * x / z + FOV + deslocamento x
     // y_screen = FOV * y / z + FOV + deslocamento y
     fin_x = (256*tmp_x / (swp_z+256))+s_x;
     fin_y = (256*swp_y / (swp_z+256))+s_y;

   PutPixel(fin_x, fin_y, Cube[i].color, vis);
    }
    // copia para o video
    memcpy(VIDMEM,vis,64000);
    // espera retraco de video
    wait_vertical();
    // atualiza angulo
    ang+=0.05;
    if (ang >= 6.28) ang-=6.28;
   }
  WCC_SetMode(0x3);
 }

 //-------------------------------[ cut end ]-------------------------------

  . Finalizando

   Espero que voce divirta-se com seus  3DS... Se  voce  quiser  implementar
 wireframe aqui, basta desenhar linhas ligando  os  vertices.  Se  voce  nao
 conseguir um algoritmo para desenhar linhas, e so pedir por e-mail  que  eu
 mando, ok? :)

  . Greetings

    xcaRIOca, xROD, Wiz, X_cAmArO, _TesT_, Mingo, Forg3, Evilspirit
 e o resto do CodersZine.
    Imago, theEnd, Crazy Creations, XKR e o resto da demoscene brasileira

  . A seguir cenas dos proximos capitulos

   - Poligonos Wireframe 
   - Preenchimento de Poligonos
   - Algoritmos de Remocao de faces Ocultas
   - Sombreamento
   - Faca voce mesmo seu proprio leitor de arquivos .3DS

   Salutaciones,
                Hugo Cristo



CodersZine.



               <   DEMOS   >                                           
                                                     by Mingo


                  UMA INTRODUCAO AS DEMONSTRACOES MULTIMIDIA

     As demonstracoes multimidia, que tanto  fascinam  os  programadores  do
 mundo inteiro, consistem em programas que procuram demonstrar ao  maximo as
 capacidades da maquina (computador), do programador, do musico e do artista
 grafico envolvidos. Principalmente ressaltando a multimidia.

     Geralmente estao envolvidos grupos na producao de uma  demo,  onde  sao
 divididas as tarefas. O que nao impede de um componente arcar com  mais  de
 uma  tarefa.  Costuma-se  dividir  as  tarefas  em  tres  partes   basicas:
 programacao (coder), graficos (gfx) e sons (sfx).

     A  matematica  anda  junto  com  os  programadores  envolvidos  com  as
 demonstracoes multimidia. Sobressai a Algebra Linear, que esta  relacionada
 principalmente aos graficos tridimensionais.

     Como  a  arte  tambem  e  fundamental  na  producao  de   demonstracoes
 multimidia,  sempre  os  envolvidos  procuram  inovar,  apresentando  novas
 rotinas, com isso, sem sombra de duvida, ajudando ate mesmo na producao  de
 utilitarios e principalmente na producao de jogos.

     As demos surgiram ha muito tempo, sendo que, vieram a se  consolidar  a
 partir de 1990, com os concursos, tambem conhecidos por  festas/competicoes
 (PARTIES/COMPOS). Inicialmente  se  afirmaram  nos  computadores  da  linha
 AMIGA, mais tarde comecaram a surgir as primeiras demos nos computadores da
 linha IBM-PC, que nos tanto utilizamos hoje.

     Encontramos tambem as intros,  que  consistem  em  pequenas  demos.  Em
 concursos relacionados chegam a consolidar limites  para  as  mesmas,  como
 relacionado ao seu tamanho. Tambem surgem categorias,  como  as  intros  de
 ate 4KBytes, as demos de ate 64KBytes e as mega-demos com mais de 64KBytes.
 As regras variam em cada competicao.

     Atraves  da  internet ,  muito  se  pode   encontrar   relacionado   as
 demonstracoes  multimidia.  Procure  imaginar  como  esses  programadores ,
 verdadeiros herois, que foram os precursores das demonstracoes   multimidia
 conseguiam criar as mesmas.

     Para saber mais sobre este assunto,  e  impressindivel  a  sua  visita,
 atraves da internet,  a  HORNET  (http://www.hornet.org),  o  maior  agente
 organizador atualmente de demonstracoes multimidia no mundo.

     Nao deixe de visitar  tambem  minhas  HOME-PAGES,  atraves  das  mesmas
 podera obter maiores informacoes,  em  portugues,  sobre  as  demonstracoes
 multimidia como tambem sobre diversos outros assuntos.
 (http://n3.com.br/~mingo)

     Eduardo Motta Buhrnheim (a.k.a. Mingo)
     mingo@n3.com.br



CodersZine.




          < REDES NEURAIS ARTIFICIAIS >
                                                                by Wiz

  PARTE 1
  
     "Inteligencia eh a capacidade de se adaptar 
      a novas situacoes atraves do raciocionio". 

     Na area de inteligencia  artificial  a  utilizacao  das  redes  neurais
 artificiais tem um papel bastante importante. No  entanto,  poucas  pessoas
 tem ideia do que sao e o que fazem essas  tais  redes,  ou  o  quanto  elas
 possam ser uteis.

  O QUE EH UMA REDE NEURAL ARTIFICIAL? 

     Para responder a essa pergunta vou primeiro me referir as redes neurais 
 naturais :) 
     O nosso cerebro eh constituido de celulas nervosas chamadas  neuronios,
 que  por sinal sao bem diferentes das demais celulas do  corpo.  Sao  muito
 mais complexas. Os neuronios estao interligados de um jeito que formam  uma
 rede, e se comunicam atraves de impulsos eletricos(algo em torno de  70mv).
 Cada neuronio recebe varios sinais de entrada atraves de seus  dendritos  e
 somente uma saida  que  eh  enviada  atraves  de  uma  ramificacao  chamada
 axonio.  Fiz um grafico meio primitivo (tambem nao  posso  fazer  milagres)
 mostrando  como eh um neuronio: 

                 | | | | 
             - /----------\ axonio (saida)      / 
  dendritos - |  neuronio  >==================== - sinapses
  (entradas) - \----------/                     \
                  | | | | 

     Os neuronios realizam sinapses, que sao conexoes com outros  neuronios.
 Sao  atraves dessas conexoes sinapticas que os sinais sao  propagados  pelo
 cerebro. E nosso cerebro tem em media  10.000.000.000  de  neuronios.  Cada
 neuronio consegue fazer ate 10.000  sinapses.  Se  considerarmos  que  cada
 neuronio trasmite um bit, entao concluiremos que o  cerebro  transmite  uma
 densidade de 100.000.000.000.000 de bits. Da para se dizer  que  o  cerebro
 recebe em torno de 100.000.000  de  sensacoes  por  segundo.  Interessante,
 nao? Realmente o cerebro eh a maquina mais complexa que conhecemos.
 Pesquisas recentes indicam que o cerebro eh  muito  mais  complexo  do  que
 imaginavamos anteriormente, por que eh como se cada neuronio  (ou  conjunto
 deles) funcionasse de uma maneira diferente. Outro detalhe: a  inteligencia
 de uma pessoa nao pode ser calculada atraves do  tamanho  de  seu  cerebro,
 mas sim pela  quantidade  e  qualidade  das  suas  conexoes  sinapticas.  O
 aprendizado tambem esta intimamente ligado ao numero de sinapses. Mas  isso
 ja eh outra historia...
     Enfim, as redes neurais artificias tentam abstrair  as  caracteristicas
 desses neuronios para um modelo matematico, e atraves disso criar  maquinas 
 "inteligentes". 

  HISTORIA DAS REDES NEURAIS ARTIFICIAIS 

     Voce acha que esse negocio de redes neurais eh coisa de  agora,  e  que
 foi inventada a poucos anos atras? Na verdade as pesquisas em  torno  disso
 ja sao bem antigas! Provavelmente mais antigas do que voce :) 
     As primeiras tentativas de se criar uma rede  neural  artificial  foram
 feitas  na  decada  de  40  pelo  neurofisiologista  Warren  McCuloch  e  o
 matematico Walter  Pitts  da  universidade  de  Illinois.  O  conceito  era
 diferente do que existe hoje, mas da para afirmar que a tecnica  das  redes
 neurais eh a mais antiga na area de inteligencia artificial. 

     No ano de 1949, um tal de Donald O. Hebb descobriu  como  funcionava  o 
 aprendizado a nivel celular, e  isso  ajudou  os  pesquisadores  a  criarem 
 algoritmos de treinamento de redes neurais. 

     Foi em 56 que a primeira rede  neural  artificial  foi  apresentada  ao
 publico, numa conferencia sobre inteligencia artificial. Durante toda  essa
 epoca foram apresentados novos modelos de redes. Mas todas elas eram  ainda
 muito simples, e suas aplicacoes praticas eram muito limitadas.  Foi  entao
 que em 69 um tal de Marvin Minsky e Seymour Papert, que eram cientistas  de
 renome na epoca, aproveitaram esse ponto fraco  para  publicarem  um  livro
 criticando duramente as redes neurais  artificiais.  Eles  bem  que  tinham
 razao (na epoca), pq todos os modelos de redes soh  tinham  uma  camada  de
 neuronios, e ninguem sabia como  implementar  uma  com  varias  camadas.  O
 problema eh que redes de  uma  soh  camada  nao  fazem  nada  de  realmente
 inteligente. Mas o pior eh que essa publicacao teve  um  efeito  desastroso
 para todas as pesquisas que  estavam  sendo  feitas  nessa  area,  pois  os
 investimentos que  estavam  sendo  aplicados  foram  todos  desviados  para
 pesquisas em outros campos de IA. 
      Somente 13 anos depois, em  82,  o  fisico  e  biologo  John  Hopfield
 conseguiu contestar com sucesso as teses de Minsky  e  Papert,  criando  um
 novo modelo de rede neural, o que deu um novo impulso  a  essa  area.  Isso
 significa  que  mesmo  durante  esse  tempo  de  hibernacao  aparente ,  as
 pesquisas nao pararam. Muitos cientistas continuaram trabalhando  na  area,
 mas as escondidas,  talvez  com  medo  de  receber  criticas  dos  colegas.
 Pessoalmente eu admiro muito essas pessoas, que trabalham  pela  verdadeira
 ciencia, ao contrario da maioria dos cientistas  que  soh  querem  aumentar
 sua reputacao, trocando favores diante da comunidade cientifica  (que  esta
 mais para politica do que cientifica). Me desculpem o desabafo... :P 

  O FUTURO

     Felizmente hoje existem muitas pesquisas sendo realizadas neste  campo,
 mas eh importante lembrar que ainda estamos dando os primeiros passos nessa 
 tecnologia.  Eh  pura  ficcao  imaginar  que  logo  vai  ser  inventado  um
 computador mais inteligente que os humanos, ou ainda  que  criarao  um  ser
 cibernetico. Essa euforia inicial eh compreensivel, mas deve  ser  evitada,
 para nao corrermos o risco de cair  no  mesmo  erro  que  os  pesquisadores
 pioneiros. Pode ter certeza que ha sempre  um  Minsky  esperando  que  isso
 aconteca :)

     A limitacao de se fazer  sistemas  complexos  nao  eh  tao  somente  do
 computador, mas sim do ser humano. A complexidade de um sistema assim seria
 extrema. Isso sem falar da dependencia que temos  de  pesquisas  de  outras
 areas, principalmente da neurofisiologia. O que teremos agora nos  proximos
 anos serao computadores com  reconhecimento  de  voz  e  reconhecimento  de
 padroes melhores que os atuais. Outra area emergente eh o da compreensao da
 linguagem natural, que devera ser incluida em novos sistemas  operacionais.
 Enfim, as redes neurais artificiais  trabalharao  em  conjunto  com  outros
 metodos (ex.: logica nebulosa) e seguindo essa evolucao  sua  eficiencia  a
 tornara  cada vez mais popular, a ponto de  fazer  parte  ativa  de  nossas
 vidas.



CodersZine.



                 <  E-MAILS  >                                                 


     Estamos com um e-mail  temporario   -=> coders@usa.net <=-   assim  que
 mudarmos, avisaremos, e' claro.
     So'  pediremos  uma  coisa,  nao  mandem  mails  pedindo  compiladores,
 turoriais, ou disassembladores, nao  mandaremos  nada  por  e-mail!!  Todos
 nossos tutoriais, compiladores e arquivos, estarao disponivel em nosso site
 www.come.to/coders. Ahh.. tentaremos arrumar um  bot  com  ircserver,  para
 disponibilizar nosso zine tbm no IRC (no #coders da brasirc).
  
 Essa e' a resposta q mandaremos p/ todos vao mandar  e-mails  pedindo  para
 ser um membro do grupo!!

 Resposta: O CodersGroup e' mais do que um grupo  de  programadores,  e'  um
 grupo de amigos, que frequentam  um  knal  de  IRC  (#Coders  na  BrasIRC),
 por isso nao podemos  colocar  qualquer  um  de  membro,  porem  vcs  podem
 frequentar o knal, se enturmar, ai... quem sabe...


CodersZine



    
                  <  LINKS  >
                                                    by CodersGroup


       Ai estao alguns links sobre programacao, demos e graficos...


 http://www.come.to/coders  -  hehhe.. a nossa page

 http://www.hornet.org - um dos melhores sites dobre demoscene  
 
 http://www.vix.nutecnet.com.br/~imago - page da quakeEStation 

 http://www.geocities.com/WallStreet/6932 - site do grupo XKR
                                         
 http://www.gustavo.net - uma otima page sobre programacao

 http://dicas-l.unicamp.br - varios tutoriais sobre informatica

 http://phenomenon.magnet.at - #C++ da efnet

 http://www.info.ex.ac.uk/~PMBearne/DGC.html - the delphi game's criator

 http://ftp.arl.mil/ftp/historic-computers/gif - fotos de computadores
                                                              MUITO velhos 




CodersZine.



                <  QUEM SOMOS??  >



         Opa.. aki vai uma breve descricao da galera que se matando
                       para escrever esse o zine:


   CR4sH^0v3 <cr4sh_0v3rrid3@hotmail.com>
   Nome: Crash Override  -  Idade: 19
   Linguagens: Clipper, Pascal, C/C++, ASM, Jscript

   Hammett <hammett@thepentagon.com>
   Nome:  -  Idade:
   Linguagens: Visual Basic

   hC <hcristo@zaz.com.br>
   Nome: Hugo Cristo  -  Idade: 18
   Linguagens: C/C++

   Jac{Delpher} <>
   Nome: Breno Jacinto Duarte da Costa  -  Idade: 16
   Linguagens: Delphi, Pascal, Java e JavaScript

   KdoskD <aama@svn.com.br>
   Nome: Alessandro  -  Idade: 17
   Linguagens: Variantes do Basic, C/C++ e Delphi.

   Mingo <mingo@n3.com.br>
   Nome: Eduardo Buhmheim-  Idade: 27
   Linguagens: Pascal e ASM

   Progman<e.lang@mfa-creativenet.com.br>
   Nome: - Idade:
   Linguagens:

   Rashi <next@mandic.com.br> colaboradora da revista Forum Access
   Nome: Larissa Redeker -  Idade: 23
   Linguagens: Visual Basic, Foxpro, Clipper
   
   XCaption <rodrigorodriguez@usa.net>
   Nome: Rodrigo Rodriguez  -  Idade: 18
   Linguagens: C++, Java, Visual Basic e Delphi

   xcaRIOca <xcarioca@usa.net>
   Nome: Ricardo G. Soares Filho  -  Idade: 19
   Linguagens: C/C++

   xCrown <fenix@netpatos.com.br>
   Nome: Claudio  -  Idade: 16
   Linguagens: C/C++ e Pascal 

   xROD <rod@svn.com.br>
   Nome: Rodrigo Rocha Gomes e Souza  -  Idade: 13 
   Linguagens: DJGPP, Asm, Pascal e Basic

   X_cAmArO <x_camaro@thepentagon.com>
   Nome: Thiago M. M. Teodoro  -  Idade: 16
   Linguagens: Um pouco de Cobol e Pascal, aprendendo C++, Clipper e Vb

   Wiz <harlen@geocities.com>
   Nome: Harlen C. Batagelo  - Idade: 20
   Linguagens: C/C++ e Asm

  
CodersZine.



              < AGRADECIMENTOS >
                                                  

       ThanX a todos que estao nos apoiando e divulgando esse novo zine.

           Muito obrigado tbm a Micro$oft, que nos motiva a programar,
                   visto que seus softwares sao um lixo.

    Obrigado a todos vcs que estao lendo esse humilde, mas promissor zine.

                ThanX tbm a todos do #Linux que estao apoiando!!

              Brigado a Delorie, por ter deixado o DJGPP de graca.

          E um obrigado especial para todos os outros membros que nao
                 tiveram tempo de contribuir p/ o zine!!
        ZeR0w, Hate-Win, Writeln, GusTyler, _TesT_, WordMacro, Kaotica,
          underwater, KRoNoS, EvilSpirit, Cyron, HC_, ^MAX^, _DRiKa_,
                           CBRaMoNe, |MaLuCo| e ]Anjo[
                           acho que estao todos ai ;-)
                                                      by Coders Editors

 
                                     

         <><>   

     Jonny olha para os lados, confuso, sem saber sobre o que pensar.
     Ele recompoe-se e olha fixamente para a  professora.  "Eu  quero  criar
 demos.", ele diz. Suas palavras iam tornando-se mais fortes e confiantes  a
 medida que ele as pronunciava. "Eu quero criar algo que mudara a  percepcao
 de realidade das pessoas. Eu quero que elas saiam de  perto  do  computador
 atordoadas, incertos de seus passos e visao. Eu quero criar algo  que  saia
 do  monitor  e  atinja-os ,  fazendo  batimentos  cardiacos  e   respiracao
 diminuirem pela metade. Eu quero criar algo que, apas assistido,  deixe  as
 pessoas relutantes em sair, pois saberao que nada mais naquele  dia  podera
 ser tao real, tao luminoso, tao bom. Eu quero  criar  demos."  Silencio.  A
 classe e a professora olham para Jonny, pasmos. Agora e' a professora  quem
 esta confusa. Jonny fica envergonhado, sentindo que algo mais  precisa  ser
 dito. "Ou isso ou eu quero ser bombeiro."

                                 - Grant Smith, 14:32, 21/11/1993
                                                              
         <><>   


                          ;!;,                     ;!;                    
                          ;!!!!,                   !!!!                   
                          `!!!!!;                  !!!!>                  
                           !!!`!!!                 !!!!!>                 
                           !!! !!!>                !!!!!!                 
                           !!! !!!!>               !!!>!!>                
                          ;!!!,`!!!!>             {!!!>!!!                
                          !!!>d'!!!!>             !!!!>`!!>               
                         {!!!,$ !!!!'            ;!!!! `!!!               
                        {!!!,$F,!!!>             !!!!'J !!!               
                       !!!!,$$ !!!!             !!!!! $>!!!               
                      !!!'J$$ !!!!             !!!!!>,$>!!!               
                    ;!!!'z$P !!!!             {!!!!!,$P !!!               
                   {!!!'J$P !!!!            ,!!!!!',$$'{!!'               
                  {!!!!J$",!!!'            ;!!!!! d$P {!!'                
                 {!!!!,$P,!!!'           ,{!!!!'z$P";!!!                  
                 !!!!'J$ !!!'          ,{!!!'_zP",{!!''                   
                :!!!!:$({!!'          ;!!!'  ,;;!!''                      
                `!!!!,P'!!!          {!!',;{!!''                          
                 {!!!> {!!    { ;{>'  ,,;!''                              
                  {!!!,`!!   !!!!!!!!; `                                  
                   `!!!!!!-`'!!!!!!;;>>                                   
                     {!! {!!!>!!!!!!!'{!!!,                               
                      ',!',cccc,`{!!!!>,bc,                               
                      ;!'J$$$$$$$c`!!!'$$$$b                              
                      !! $$$$$$$$$b,!!,?$$$$$c    _,                      
                      !!,?$$$$$$$$$L`!!.$$$$$$b nMMMMn,                   
                      !!! ?$$$??$$$$,!!>  `3$$"dMMMMMMML                  
              =nMMMMMMhx.` ?$   `$$$h`!!>  ,$"JMMM?MMMMM.                 
              udMMMMMMMMMMhn"    $$$P !',{CC MP",nMMMMM>                  
            uMMMMMMMMMMMMMMMMMMnmnnxxnmx`{>'xP4MMMMMMMM>                  
            3MMMMMMMMMMMTMMMMMMPP"".::`TMMMMP,MMMMMMMM"                   
            `MMMMMMMMMMMMnmnmnmMbm`:'': ccvc dP"',`MP'                    
             "MMMMMMMMMMMMMMMMMMMML`::: $$P'd",d$$b                       
               "4MMMMMMMMMMMMMMMMMMb,`::,udM'dP'$$$b                      
                    `""""""""""""" "MMMMM",, "="?$$$b,                    
                              ,;!!!!;,",;{!!,d$$$$$$$$b';>;               
                            ,{!!!!!!!!!!!!!!,?$$$?$$$$F{  {!>             
                           ;!!!!!!!!' !!!!!!!>,""",, ,,,;!!!`             
                          {!!!!!!!'   !!!!!!!!!!!!!!L `!'`                
                          ``{!!!!!!!!,`{!!!!!!!!!!''''                    
                              ``'!!!'.;`'{!'`,xnnMMMM>                    
                                     ' d$ dMMMMMMMMMP                     
                               4$c"P)d$$P )MMMMMMMM"                      
                                $$r $$$" { 4MMMMP"                        
                                 "???",;!!!> ,;-                          
       .,,uuu,  ._                  !!!!!!',!!'          ,>,unMMMMnn,     
   ,udMMMMMMMMMn,`!!!;;,.           !!!!!';!!'      ,;;!!,nMMMMMMMM,TMb,  
 .nMMMMP"3MMMMMMMMn`!!!!!!!;;,     !!!!! {!!'   ,;!!!!!'nMMMMMMC"4MMMn"Mb 
,MMMM",dMMMMMMMMMMML`!!!!!!!!!!!;;,!!!! {!!;;{!!!!!!!! dMMMMMMMMMb,4MMM,4L 
MMMP,MMMMMMP",ndMMMML`!!!!!!!!!!!!!!!! !!!!!!!!!!!!!! MMMMMMMMMMMMMh"MMM.P 
MMP,MMMMMP,dMMMMMMMMML{!!!''',,unnnn= =nnnnn,,,`''!!'dMMMMMMMMMMMMMMM'MM; 
4M MMMMMF,MMMMMMMMMMMM,,udMMMP""          `"TTMMMMbudMMMMMMMMMMMMMMMM M"  
 T MMMMM.MMMMMMMMMMMMMMMP""                    `"TTMMMMMMMMMMMMMMMMP''    
   4MMMM:MMMMMMMMMMMMP"                              `""TTTMMTTTT"        
    "TMM 4MMMMMMMMP"                                                      
           `"""          


         
 E', acho que por enquanto esta bom. Foi apenas uma introducao as
        linguagens, aguardem as proxima edicoes, que viremos com mais codigo.
                                         


<cout << "EOF";>
